You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:45:37