我有两张桌子,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
答案 0 :(得分:0)
select t1.ITEM,t1.CUSTSUM,t2.SHPSUM from
(SELECT ITEM, SUM(QTY_OPEN) AS CUSTSUM
FROM CUSTORD GROUP BY CUSTORD.ITEM) t1,
(SELECT ITEM, SUM(QTY_OPEN) AS SHPSUM
FROM SHPORD GROUP BY SHPORD.ITEM) t2
where t1.ITEM=t2.ITEM
我希望这应该有效,我没有测试过,只是试着看看