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
;