我有多行定单数据,我需要将其合并为每部分一行。
示例如下:
OrderNum PartNum Qty
-------------------------------
1 24 2
2 25 10
3 24 5
4 24 10
然后需要将其合并为:
OrderNum PartNum Qty
-------------------------------
1, 3, 4 24 17
2 25 10
有人知道我该怎么做吗?
我在网上浏览了一下,但找不到此用例的解决方案。
提前谢谢了,
最佳答案
可以通过在PartNum上分组,用SUM()
将数量求和并在相关子查询中使用FOR XML PATH('')
串联字符串来完成。 this answer on SO中介绍了使用FOR XML PATH('')连接字符串。
DECLARE @t TABLE(OrderNum INT, PartNum INT, Qty INT);
INSERT INTO @t(OrderNum,PartNum,Qty)
VALUES(1,24,2),(2,25,10),(3,24,5),(4,24,10);
SELECT
OrderNum=STUFF((
SELECT
','+CAST(i.OrderNum AS VARCHAR)
FROM
@t AS i
WHERE
i.PartNum=o.PartNum
FOR XML
PATH(''), TYPE
).value('.[1]','VARCHAR(MAX)'),1,1,''),
o.PartNum,
Qty=SUM(o.Qty)
FROM
@t AS o
GROUP BY
o.PartNum;
结果:
OrderNum | PartNum | Qty
------------------------
1,3,4 | 24 | 17
2 | 25 | 10