2

複数行の注文データがあり、部品ごとに 1 行にまとめる必要があります。

例は次のとおりです。

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

どうすればこれを行うことができるか、誰にもアイデアがありますか?

私はオンラインで見回しましたが、このユースケースの解決策を見つけることができません.

よろしくお願いします。

4

5 に答える 5

4

これを試して

SELECT STUFF((SELECT ',' + CAST(OrderNum AS VARCHAR(4)) 
              FROM mytable AS s
              WHERE s.PartNum = t.PartNum
              FOR XML PATH('')), 1, 1, '') AS OrderNum
       PartNum, SUM(Qty)
FROM mytable AS t
GROUP BY PartNum
于 2016-11-24T12:15:39.257 に答える
2

これは、PartNum でグループ化し、数量を合計し、相関サブクエリSUM()を使用して文字列を連結することで実行できます。FOR XML PATH('')FOR XML PATH('') を使用して文字列を連結する方法については、 SO に関するこの回答で説明されています。

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
于 2016-11-24T12:16:38.693 に答える