如何在T-SQL中按大洲分区实现多行国家名称拼接?
按大洲分组拼接国家名称的SQL实现
针对你提出的按Continent列分区,将每个大洲的国家名称拼接成单个逗号分隔字符串的需求,这里提供两种适配不同SQL Server版本的实现方法:
1. 最优方案:使用STRING_AGG(SQL Server 2017+)
SQL Server 2017及以上版本提供了专门的字符串聚合函数STRING_AGG,语法简洁且性能优异,直接支持分组拼接:
SELECT Continent, STRING_AGG(CountryName, ', ') AS Countries FROM Application.Countries GROUP BY Continent;
STRING_AGG的第一个参数指定要拼接的列,第二个参数是分隔符,通过GROUP BY Continent自动按大洲完成分组聚合。
2. 兼容旧版本:FOR XML PATH分组写法
如果你的SQL Server版本低于2017,可以基于你原有的FOR XML PATH逻辑,结合关联子查询和分组实现需求:
SELECT Continent, STUFF( (SELECT ', ' + CountryName FROM Application.Countries c2 WHERE c2.Continent = c1.Continent FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '' ) AS Countries FROM Application.Countries c1 GROUP BY Continent;
- 关联子查询
WHERE c2.Continent = c1.Continent确保只拼接当前大洲的国家 STUFF函数用于移除拼接结果开头多余的,(替代原示例的SUBSTRING,更灵活)TYPE和.value('.', 'NVARCHAR(MAX)')用于避免特殊字符被XML转义
内容的提问来源于stack exchange,提问作者GodspeedYou77
相关产品推荐
相关产品推荐

