假设我有一个客户表、订单表和报价表。每个客户可以没有、一个或多个订单和报价条目。
我可以这样得到每个客户订购的产品数量:
SELECT CustomerName, SUM(Orders.OrdQuantity) as TotalOrderQty
from Customer
join Orders on Customer.id=Orders.CustomerId
group by CustomerName;
我可以做类似的查询来获取这样的报价数量:
SELECT CustomerName, SUM(Quotes.QuoteQuantity) as TotalQuoteQty
from Customer
join Quotes on Customer.id=Quotes.CustomerId
group by CustomerName;
但是我如何在一个查询中同时执行这两项操作才能得到这样的结果集:
CustomerName TotalOrderQty TotalQuoteQty
当我尝试进行多个内部联接时,如果客户在两个表中都有条目,我会计算两次数量。
但是我如何在一个查询中同时执行这两项操作?
您可以在加入之前进行预聚合——或者,由于您只需要每个表中的一个聚合列,您还可以使用相关子查询:
select c.customerName,
(select sum(o.OrdQuantity) from Orders o where c.id = o.CustomerId) TotalOrderQty,
(select sum(q.QuoteQuantity) from Quotes q where c.id = q.CustomerId) TotalQuoteQty
from Customers c