T-SQL创建逗号分隔数组,同时保持父类别信息完整

时间:2018-03-02 18:44:30

标签: sql-server tsql sql-server-2012

假设我有一个包含ProductID和OrderNumber的表。有多个产品,每个产品都有多个订单。

我要做的是转:

+-----------+-------------+
| ProductID | OrderNumber |
+-----------+-------------+
|         1 |     1, 2, 3 |
|         2 |        4, 5 |
|         3 |        6, 7 |
+-----------+-------------+

成:

{{1}}

很容易创建一个逗号分隔的所有订单号列表,如下所示:Convert multiple rows into one with comma as separator

我无法弄清楚的是如何在保持ProductID信息完整的同时从行创建数组。

1 个答案:

答案 0 :(得分:3)

你需要使用如下 -

SELECT b.ProductID 
    , STUFF 
        ((
        SELECT CONCAT(', ' , a.OrderNumber)
        FROM PO a
        WHERE ( a.ProductID = b.ProductID )
        FOR XML PATH('')
        ) ,1,2,'') 
        AS OrderNumber
FROM PO b
GROUP BY b.ProductID

<强>输出

ProductID   OrderNumber
----------- -------------------
1           1, 2, 3
2           4, 5
3           6, 7

(3 rows affected)

有关详细信息,请参阅 -

https://msbiskills.com/2017/12/25/sql-puzzle-dynamic-pivot-puzzle/

https://msbiskills.com/2015/03/25/t-sql-query-group-by-xml-path-puzzle/