Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 对一列求和,然后根据具有重复值的另一列进行分组_Sql Server 2005_Group By_Calculated Columns - Fatal编程技术网

Sql server 2005 对一列求和,然后根据具有重复值的另一列进行分组

Sql server 2005 对一列求和,然后根据具有重复值的另一列进行分组,sql-server-2005,group-by,calculated-columns,Sql Server 2005,Group By,Calculated Columns,这是我基于上述查询的当前输出: 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' 正如您在上文

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

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'  
正如您在上文中注意到的,CoLineNumber 4是两倍,因为我们有一个原始条目,然后将数量颠倒了2,然后CoLineNumber 6有三个条目,原因相同。我想总结一下FinalShippedQty列中那些具有相同CoLineNumber且属于相同conNumber的行。这只是一个订单,但通常真正的提取物可能会有很多

以下是我希望看到的输出:

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
如果您有任何问题或需要进一步解释,请告诉我。再次请记住,我的表中有数百个编号,但我只想对那些相等且属于该特定编号的编号的最终发货数量求和


编辑:我添加了我第一次没有的库存栏

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

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
选择
发货日期、仓库、COLINENNUMBER、CONNUMBER、发货数量、反向数量、,
合计(如果ReversedQty为空,则为ShippedQty,否则为ReversedQty*-1结束)作为最终发货数量
从MyTable
其中CONumber='RAN-00001000'
分组
发货日期、仓库、科林编号、科尼编号
;
还请注意,您的案例表达式可以使用以下方法重写:

选择
发货日期,仓库,科林编号,科尼编号,
合计(合并(-ReversedQty,ShippedQty))作为最终发货数量
从MyTable
其中CONumber='RAN-00001000'
分组
发货日期、仓库、科林编号、科尼编号

;谢谢你的回答。在看到你的答复之前,我已经解决了这个问题。我的问题是,我有一些额外的列,我没有包括在这里,因为代码太长。其中两个列中有不同的数据,这导致分组无法正常工作,并不断生成额外的行和重复项,我一删除所有行就一切正常。现在我不知道Coalesce函数,因此这在将来会有所帮助。:-)
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
;
SELECT
    ShipDate, Stockroom, COLineNumber, CONumber,
    SUM(COALESCE(-ReversedQty, ShippedQty)) AS FinalShippedQty
FROM MyTable  
WHERE CONumber = 'RAN-00001000'
GROUP BY
    ShipDate, Stockroom, COLineNumber, CONumber
;