假设我有一个包含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信息完整的同时从行创建数组。
答案 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/