2013-06-27 1 views
2

Je souhaite joindre ces deux requêtes, je souhaite soustraire SQuantity de PQuantity et SAmount de PAmount. Comment puis-je y parvenir avec une requête?Joindre plusieurs tables dans Sélectionner une requête avec des fonctions d'agrégat

SELECT   
SUM(QtyShare) AS SQuantity, SUM(QtyShare * Rate) AS SAmount,CompanyId 
FROM Sales 
WHERE (UserId = 1) 
GROUP BY CompanyId 

SELECT SUM(Quantity) AS PQuantity, SUM(Quantity * Rate) AS PAmount,CompanyId 
FROM (SELECT UserId, CompanyId, Quantity, Rate AS Rate 
     FROM Purchase 
     UNION ALL 
     SELECT UserId, CompanyId, Quantity, 0 AS Rate 
     FROM Bonus 
     UNION ALL 
     SELECT UserId, CompanyId, Quantity, Rate AS Rate 
     FROM RightShare) AS t 
WHERE (UserId = 1) GROUP BY CompanyId 
+0

Est-ce que la table de vente ont une colonne (ou une combinaison de colonnes pour faire un enregistrement unique) qui est disponible en achat, Bonus ou RightShare pour une jointure? – ChrisProsser

+0

CompanyId, la deuxième requête renvoie des résultats par entreprise que je veux soustraire de la table des ventes par entreprise, par exemple: WHERE Sales.CompanyId = Purchase.CompanyId – user2516394

Répondre

3

Essayez:

SELECT CompanyId, 
     SUM(PQuantity) PQuantity, 
     SUM(PQuantity * PRate) PAmount, 
     SUM(SQuantity) SQuantity, 
     SUM(SQuantity * sRate) SAmount 
     SUM(PQuantity) - SUM(SQuantity) TQuantity, 
     SUM(PQuantity * PRate) - SUM(SQuantity * sRate) TAmount 
FROM 
(SELECT UserId, CompanyId, Quantity PQuantity, Rate PRate, 0 SQuantity, 0 SRate 
FROM Purchase 
UNION ALL 
SELECT UserId, CompanyId, Quantity PQuantity, 0 PRate, 0 SQuantity, 0 SRate 
FROM Bonus 
UNION ALL 
SELECT UserId, CompanyId, Quantity PQuantity, Rate PRate, 0 SQuantity, 0 SRate 
FROM RightShare 
UNION ALL 
SELECT UserId, CompanyId, 0 PQuantity, 0 PRate, QtyShare SQuantity, Rate SRate 
FROM Sales) sq 
WHERE (UserId = 1) 
GROUP BY CompanyId 
Questions connexes