我有两张表,SHPORD 和 CUSTORD,我想获取到今天尚未完成的所有订单的未完成单位的总和。底部示例。
单独的查询如下所示:
SELECT SHPORD.ITEM, SUM(ISNULL(SHPORD.QTY_OPEN,0)) AS SHPSUM
FROM SHPORD SHPORD
WHERE SHPORD.DATE_DUE <= GETDATE() AND SHPORD.QTY_OPEN > 0
GROUP BY SHPORD.ITEM
SELECT CUSTORD.ITEM, SUM(ISNULL(CUSTORD.QTY_OPEN,0)) AS CUSTSUM
FROM CUSTORD CUSTORD
WHERE CUSTORD.DATE_DUE <= GETDATE() AND CUSTORD.QTY_OPEN > 0
GROUP BY CUSTORD.ITEM
这些返回所需的结果。
但是,如果我尝试像这样组合它们:
SELECT CUSTORD.ITEM, SUM(ISNULL(CUSTORD.QTY_OPEN,0)) AS CUSTSUM, SUM(ISNULL(SHPORD.QTY_OPEN,0)) AS SHPSUM
FROM CUSTORD CUSTORD
LEFT JOIN SHPORD SHPORD ON CUSTORD.ITEM = SHPORD.ITEM
AND SHPORD.DATE_DUE <= GETDATE() AND SHPORD.QTY_OPEN > 0
WHERE CUSTORD.DATE_DUE <= GETDATE() AND CUSTORD.QTY_OPEN > 0
GROUP BY CUSTORD.ITEM
对于大约三分之一的项目,我得到了错误的结果。
此查询已被解构为尽可能简单,并且仅在使用两个 SUM 列时才会出现此问题。我不知所措。可能只是缺少一些简单的东西。
我应该使用什么查询?
例子:
Table CUSTORD
CO# ITEM QTY OPEN
111 A 5
222 B 10
333 A 15
Table SHPORD
SO# ITEM QTY OPEN
444 B 2
555 B 4
666 A 7
OUPUT
ITEM CUSTSUM SHPSUM
A 20 6
B 10 7