You need to enable JavaScript to run this app. SQL Server 2017如何实现单列多行数据合并为一行 求查询语句
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2017如何实现单列多行数据合并为一行 求查询语句

需求说明

使用环境为SQL Server 2017,需要实现将指定列的多行数据合并为单行输出,参照截图确认目标效果,需要可直接运行的对应查询语句。

期望输出效果参考

实现代码

该需求可通过SQL Server 2017原生提供的STRING_AGG()聚合函数直接实现,无需依赖旧版本复杂的FOR XML PATH拼接逻辑,不同场景的参考语句如下:

  • 基础分组场景:按指定维度将同组的目标列值用逗号拼接
SELECT
  分组维度列名, -- 不需要分组时可移除该列
  STRING_AGG(需要合并的目标列名, ',') AS 合并结果
FROM 源表名
GROUP BY 分组维度列名;
  • 排序控制场景:需要固定同组内值的拼接顺序时,搭配WITHIN GROUP子句指定排序规则
SELECT
  分组维度列名,
  STRING_AGG(需要合并的目标列名, ',')
    WITHIN GROUP (ORDER BY 排序参考列 ASC/DESC) AS 合并结果
FROM 源表名
GROUP BY 分组维度列名;
  • 全量合并场景:无分组维度,直接合并全表目标列的所有值为单行
SELECT
  STRING_AGG(需要合并的目标列名, ',') AS 全量合并结果
FROM 源表名;

实际使用时可直接替换语句中对应的表名、列名匹配自身表结构;如果需要排除重复值,可在聚合列前加DISTINCT关键字,即写成STRING_AGG(DISTINCT 目标列名, ',');需要自定义分隔符时,直接替换函数第二个参数的逗号即可,支持换行符CHAR(13)+CHAR(10)等特殊值。

特性说明

  • 函数会自动跳过目标列值为NULL的行,无需额外写过滤条件排除空值
  • SQL Server 2017为正式支持STRING_AGG()的首个大版本,可直接使用无兼容性问题

内容的提问来源于stack exchange,提问作者SQL Rookie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 23:06:04