SQL Server从多个表中查询SUM



不幸的是,我遇到了一个无法解决的问题。。。

我有两张表:采购订单行和销售订单行。现在,我需要从单个采购订单中提取信息,并从销售订单行和采购订单行中提取特定项目(在该采购订单上列出(的案例总和。就像我订购了10张桌子,我想知道我已经订购了20张桌子,还有25张桌子的销售订单。以下是我的疑问。

SELECT s.POLID, s.ItemID, s.CSordered,
SUM(sl.CSopen) AS CSopenSO, SUM(pl.CSopen) AS CSopenPO
FROM PurchaseOrdersLines s
LEFT JOIN SalesOrdersLines sl ON s.ItemID = sl.ItemID
LEFT JOIN PurchaseOrdersLines pl ON s.ItemID = pl.ItemID
WHERE s.POID = '" . $row['POID'] . "'
GROUP BY s.POLID, s.ItemID, s.CSordered

我得到了CSopenSO的SUM正确,但没有得到CSopenPO的SUM(它比应该的高出50倍(。如果我先切换LEFT JOIN带来采购订单(pl(,然后再带来销售订单(sl(,那么我会得到CSopenPO的正确SUM,但不会得到CSopenSO的SUM。我不明白LEFT JOIN的顺序如何影响总和以及如何避免它。

提前感谢您的帮助!!!希望,如果它是明确的。。

***Jarlh 建议

SELECT s.POLID, s.ItemID, s.CSordered, (
SELECT SUM(CSopen) FROM SalesOrdersLines sl WHERE sl.ItemID = s.ItemID
) AS CSopenSO, SUM(pl.CSopen) AS CSopenPO 
FROM PurchaseOrdersLines s
LEFT JOIN PurchaseOrdersLines pl ON s.ItemID = pl.ItemID
WHERE s.POID = '" . $row['POID'] . "'
GROUP BY s.POLID, s.ItemID, s.CSordered

然而,我仍然想理解为什么我上面的原始查询没有按照我希望的方式工作。我想知道错误是什么。

通常,关联子查询是最有效的方法:

SELECT s.POLID, s.ItemID, s.CSordered,
(SELECT SUM(sl.CSopen)
FROM SalesOrdersLines sl 
WHERE s.ItemID = sl.ItemID
)  AS CSopenSO,
(SELECT SUM(pl.CSopen)
FROM PurchaseOrdersLines pl 
WHERE s.ItemID = pl.ItemID
) AS CSopenPO 
FROM PurchaseOrdersLines s
WHERE s.POID = '" . $row['POID'] . "';

这假设s中的行没有被组合。

最新更新