我有多行定单数据,我需要将其合并为每部分一行。

示例如下:

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

10-04 20:31