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

如何在SSMS中用单条查询合并多列多行的唯一值至单行?

在SSMS中实现分组合并多行数据

首先先确认你的测试表结构和插入数据(我帮你整理了格式):

CREATE TABLE Table1 ([C1] varchar(50), [C2] varchar(50), [C3] varchar(50)) ;
INSERT INTO Table1 ([C1], [C2], [C3]) 
VALUES 
    ('F92', 'Game1', 'b100'), 
    ('F92', 'Game1', 'b200'), 
    ('F92', 'Game2', 'C200'), 
    ('F92', 'Game2', 'D400') ;

你已经写了STUFF+FOR XML PATH的核心思路,现在我帮你补全并优化这个查询,实现按C1和C2分组,把对应多条C3值合并成逗号分隔的字符串:

SELECT 
    a.C1,
    a.C2,
    STUFF(
        (SELECT ', ' + C3 
         FROM Table1 
         WHERE C1 = a.C1 AND C2 = a.C2 
         FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),
        1, 2, ''
    ) AS Merged_C3
FROM Table1 a
GROUP BY a.C1, a.C2;

关键逻辑解释:

  • FOR XML PATH(''):把子查询返回的多条C3值拼接成无标签的XML字符串,避免生成多余的XML节点。
  • TYPE.value('.', 'varchar(max)'):将XML格式的结果转换为普通字符串,防止特殊字符(比如&、<)被转义成XML实体(比如&amp;)。
  • STUFF(..., 1, 2, ''):移除拼接字符串开头多余的, ——子查询给每个C3前加了, ,第一条的前缀需要删掉,这里指定从第1位开始删除2个字符。

执行后你会得到预期的合并结果:

C1C2Merged_C3
F92Game1b100, b200
F92Game2C200, D400

如果你的SQL Server版本是2017及以上,还可以用更简洁高效的STRING_AGG函数实现,代码可读性更强:

SELECT 
    C1,
    C2,
    STRING_AGG(C3, ', ') AS Merged_C3
FROM Table1
GROUP BY C1, C2;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:11:06