SQL Server实现将分组的其他字段数据拼接成一条数据

在 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 ', ' + Product
        FROM Orders AS O
        WHERE O.CustomerID = Orders.CustomerID
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS Products
FROM Orders
GROUP BY CustomerID;

说明

FOR XML PATH(‘’):将数据转换为 XML 格式但不加根节点。
STUFF:用于移除多余的逗号(第一个字符)。

你可能感兴趣的:(数据库,sql)