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

Microsoft SQL Server多表查询结果列值分组合并为逗号分隔字符串

问题场景

我在使用Microsoft SQL Server,通过连接4张以上的表编写SELECT查询语句,得到的原始结果如下:

column1column2column3column4
1File1Table1Column1
1File1Table1Column2
1File1Table2Column1

需要将column4的不同值按column1、column2、column3分组合并为逗号分隔的字符串,期望得到结果:

column1column2column3column4
1File1Table1Column1, Column2
1File1Table2Column1

解决方案

方法1:使用STRING_AGG(SQL Server 2017及以上版本)

这是最简洁高效的方式,利用SQL Server内置的字符串聚合函数直接实现分组拼接:

SELECT 
    column1,
    column2,
    column3,
    STRING_AGG(column4, ', ') AS column4
FROM (
    -- 替换为你的4表连接查询语句
    SELECT column1, column2, column3, column4
    FROM 表1
    JOIN 表2 ON 表1.关联字段 = 表2.关联字段
    JOIN 表3 ON 表2.关联字段 = 表3.关联字段
    JOIN 表4 ON 表3.关联字段 = 表4.关联字段
    -- 更多表连接条件按需添加
) AS 原始查询结果
GROUP BY column1, column2, column3;

方法2:使用FOR XML PATH(兼容SQL Server 2016及更早版本)

如果你的SQL Server版本不支持STRING_AGG,可以用XML拼接的方式实现:

SELECT DISTINCT
    column1,
    column2,
    column3,
    STUFF(
        (SELECT ', ' + column4
         FROM (
             -- 替换为你的4表连接查询语句
             SELECT column1, column2, column3, column4
             FROM 表1
             JOIN 表2 ON 表1.关联字段 = 表2.关联字段
             JOIN 表3 ON 表2.关联字段 = 表3.关联字段
             JOIN 表4 ON 表3.关联字段 = 表4.关联字段
         ) AS 子查询结果
         WHERE 子查询结果.column1 = 主查询结果.column1
           AND 子查询结果.column2 = 主查询结果.column2
           AND 子查询结果.column3 = 主查询结果.column3
         FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),
        1, 2, ''
    ) AS column4
FROM (
    -- 替换为你的4表连接查询语句
    SELECT column1, column2, column3, column4
    FROM 表1
    JOIN 表2 ON 表1.关联字段 = 表2.关联字段
    JOIN 表3 ON 表2.关联字段 = 表3.关联字段
    JOIN 表4 ON 表3.关联字段 = 表4.关联字段
) AS 主查询结果;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:17:22