0

我有两张表,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
4

1 回答 1

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

我希望这应该有效,我没有测试过,但只是试试看

于 2015-11-03T19:18:10.027 回答