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

SQL Server如何将分组查询的多行结果拼接合并为单字段列表

SQL Server 分组拼接字段实现方案

需求说明

需要对测试表#PatientMeds按name字段分组,将同分组下的所有medication字段值用逗号+空格拼接为单个字段。

实现方案

方案1:SQL Server 2017及更高版本(最优)

SQL Server 2017开始内置STRING_AGG聚合函数,专门用于分组拼接场景,语法简洁性能最优:

SELECT 
    name,
    STRING_AGG(medication, ', ') AS medication
FROM #PatientMeds
GROUP BY name

如果需要对拼接的内容排序,可以追加WITHIN GROUP子句:

SELECT 
    name,
    STRING_AGG(medication, ', ') WITHIN GROUP (ORDER BY medication) AS medication
FROM #PatientMeds
GROUP BY name

方案2:SQL Server 2016及更早版本兼容

低版本SQL Server没有内置拼接函数,可通过FOR XML PATH + STUFF组合实现:

SELECT 
    DISTINCT t1.name,
    STUFF(
        (
            SELECT ', ' + t2.medication
            FROM #PatientMeds t2
            WHERE t2.name = t1.name
            FOR XML PATH(''), TYPE
        ).value('.', 'VARCHAR(MAX)'),
        1, 2, ''
    ) AS medication
FROM #PatientMeds t1

逻辑说明:

  • FOR XML PATH('') 将同分组下的多行medication值拼接为形如, Med 1, Med 2的字符串
  • STUFF 函数删除开头多余的2个字符(逗号+空格)
  • TYPE + .value 处理避免特殊字符(如&、<)被XML转义的问题

内容的提问来源于stack exchange,提问作者Donald B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:06:02