1
SELECT
    ShipDate, Stockroom, COLineNumber, CONumber, ShippedQty, ReversedQty, 
    CASE WHEN ReversedQty IS NULL THEN ShippedQty ELSE ReversedQty * - 1 END AS FinalShippedQty
FROM MyTable  
WHERE CONumber = 'RAN-00001000'  

这是基于上述查询的当前输出:

ShipDate  Stockroom CoLineNumber CONumber     ShippedQty ReversedQty FinalShippedQty
--------  --------- ------------ ------------ ---------- ----------- ---------------
8/7/2013  01        1            RAN-00001000 10         *NULL*      10
8/7/2013  41        2            RAN-00001000 12         *NULL*      12
8/7/2013  41        3            RAN-00001000 24         *NULL*      24
8/7/2013  41        4            RAN-00001000 12         *NULL*      12
8/7/2013  41        4            RAN-00001000 *NULL*     2           -2
8/7/2013  01        5            RAN-00001000 50         *NULL*      50
8/7/2013  41        6            RAN-00001000 12         *NULL*      12
8/7/2013  41        6            RAN-00001000 *NULL*     3           -3
8/7/2013  41        6            RAN-00001000 *NULL*     3           -3

正如您在上面注意到的那样,CoLineNumber 4 是两次,因为我们有一个原始条目,然后将 Qty 反转了 2,然后 CoLineNumber 6 出于相同的原因有三个条目。我想总结那些具有相同 CoLineNumber 并且属于相同 CONumber 的行的 FinalShippedQty 列。这只是这里的一个订单,但通常真正的提取物可能很多。

这是我想看到的输出:

ShipDate  Stockroom CoLineNumber CONumber     FinalShippedQty
--------  --------- ------------ ------------ ---------------
8/7/2013  01        1            RAN-00001000 10
8/7/2013  41        2            RAN-00001000 12
8/7/2013  41        3            RAN-00001000 24
8/7/2013  41        4            RAN-00001000 10
8/7/2013  01        5            RAN-00001000 50
8/7/2013  41        6            RAN-00001000 6

如果您有任何问题或需要进一步解释,请告诉我。再次记住,我拥有的表有数百个 CoNumber,但我只想总结那些相等且属于该特定 CONumber 的 CoLineNumber 的 FinalShippedQty。

编辑:我添加了第一次没有的 Stockroom 列。

4

1 回答 1

0

我相信您只需要在查询中引入分组:

SELECT
    ShipDate, Stockroom, COLineNumber, CONumber, ShippedQty, ReversedQty,
    SUM(CASE WHEN ReversedQty IS NULL THEN ShippedQty ELSE ReversedQty * - 1 END) AS FinalShippedQty
FROM MyTable  
WHERE CONumber = 'RAN-00001000'
GROUP BY
    ShipDate, Stockroom, COLineNumber, CONumber
;

另请注意,您的 CASE 表达式可以使用COALESCE重写:

SELECT
    ShipDate, Stockroom, COLineNumber, CONumber,
    SUM(COALESCE(-ReversedQty, ShippedQty)) AS FinalShippedQty
FROM MyTable  
WHERE CONumber = 'RAN-00001000'
GROUP BY
    ShipDate, Stockroom, COLineNumber, CONumber
;
于 2013-09-10T21:29:28.333 回答