2013-06-27 41 views
2

我想加入这两个查询,我想从PQuantity中减去SQuantity,从PAmount中减去SAmount。我如何通过一个查询来实现这一点。在具有聚合函数的Select查询中加入多个表

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

是否销售表有(列数或组合,制成独特的记录)一列,它是在任何购买,红利或RightShare可用于加入? – ChrisProsser

+0

CompanyId,第二个查询返回每个公司基础上的一些结果,我想从每个公司基础上的销售表中减去,例如:WHERE Sales.CompanyId = Purchase.CompanyId – user2516394

回答

3

尝试:

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