SQL Server 2012如何用GROUP BY实现分组合并文本值
MSSQL Server 2012 分组拼接字符串实现方案
SQL Server 2012版本未内置STRING_AGG聚合函数,需要通过FOR XML PATH语法实现同组文本值的逗号拼接需求,可直接使用以下SQL语句(注意将代码中的YourTableName替换为实际的表名):
SELECT t1.Col1, STUFF( ( SELECT ',' + t2.Col2 FROM YourTableName t2 WHERE t2.Col1 = t1.Col1 -- 若需要指定拼接顺序可保留以下排序语句,不需要可删除 ORDER BY t2.Col2 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS Col2 FROM YourTableName t1 GROUP BY t1.Col1
语法说明
FOR XML PATH(''):将子查询的结果以XML格式拼接,传入空参数会省略默认的行标签,直接返回文本拼接结果TYPE:指定返回结果为XML类型,避免值中的特殊字符(如<、>、&)被自动转义.value('.', 'NVARCHAR(MAX)'):将XML类型的拼接结果转换为普通字符串类型STUFF(..., 1, 1, ''):移除拼接结果开头多余的第一个逗号
扩展说明
- 如果需要对拼接的Col2值去重,可在子查询的SELECT后添加
DISTINCT关键字:SELECT DISTINCT ',' + t2.Col2 - 如果Col2存在NULL值,可将子查询中的
t2.Col2替换为ISNULL(t2.Col2, ''),避免NULL值导致整组拼接结果为NULL
内容的提问来源于stack exchange,提问作者Maxcot
相关产品推荐
相关产品推荐

