在 SQL Server 中,可以使用 STRING_AGG
函数(SQL Server 2017 及更高版本支持)将分组的其他字段数据拼接成一条数据。以下是示例代码:
假设有一个表 Orders
,结构如下:
OrderID | CustomerID | Product |
---|---|---|
1 | C001 | Apple |
2 | C001 | Banana |
3 | C002 | Orange |
4 | C002 | Grape |
5 | C001 | Mango |
需要按照 CustomerID
分组,将每个客户的产品(Product
字段)拼接到一起。
使用 STRING_AGG
SELECT CustomerID,STRING_AGG(Product, ', ') AS Products
FROM Orders
GROUP BY CustomerID;
输出
CustomerID | Products |
---|---|
C001 | Apple, Banana, Mango |
C002 | Orange, Grape |
说明
STRING_AGG(字段, 分隔符):将组内数据按指定的分隔符拼接成字符串。
GROUP BY:按 CustomerID
分组。
如果是 SQL Server 2016 或更早版本
可以使用 FOR XML PATH
方法:
SELECT CustomerID,STUFF((SELECT ', ' + ProductFROM Orders AS OWHERE O.CustomerID = Orders.CustomerIDFOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS Products
FROM Orders
GROUP BY CustomerID;
说明
FOR XML PATH(‘’):将数据转换为 XML 格式但不加根节点。
STUFF:用于移除多余的逗号(第一个字符)。