83  
查询码: 00000200
Sqlserver 中如何通过group by 实现分组合并
作者: 周杨 于 2019年03月12日 发布在分类 / 计算机应用 / 数据库 / SQLSERVER ,于 2024年01月26日 编辑
阅读 阅读数 读数 来自 分组 数据 合并 博客 专栏 查询

转自:https://blog.csdn.net/xb12369/article/details/7517698

--------------------第一步:新建表:Test----------------------------

CREATE TABLE test
(
    id       varchar(50),
    [values] varchar(10)
)

INSERT test
SELECT '001', 'aa'
UNION ALL
SELECT '001', 'bb'
UNION ALL
SELECT '002', 'aaa'
UNION ALL
SELECT '002', 'bbb'
UNION ALL
SELECT '002', 'ccc';



具体实现的方法:

方法①

SELECT id,
       [values] = stuff(b.[values].value('/R[1]', 'nvarchar(max)'), 1, 1, '')
FROM (SELECT id
      FROM test
      GROUP BY id) a
         CROSS apply (SELECT [values] =(SELECT N',' + [values]
                                        FROM test
                                        WHERE id = a.id
                                        FOR XML PATH(''), ROOT('R'), TYPE)) b;


方法②:

SELECT id, data=STUFF((SELECT ','+[values] FROM test t WHERE id=t1.id FOR XML PATH('')), 1, 1, '')
FROM test t1
GROUP BY id


最后结果:

id                                                 data

-------------                                     ----------------------

001                                                aa,bb

002                                                aaa,bbb,ccc


(2 行受影响)


不想要test的时候:drop table test


若不分组合并,将数据集全部合并,可以使用COALESCE函数

DECLARE @Values1 VARCHAR(MAX),@Values2 VARCHAR(MAX)

SELECT @Values1 = COALESCE(@Values1 + ', ', '') + 字段1,@Values2 = COALESCE(@Values2 + ', ', '') + 字段2
FROM TableA

SELECT @Values1,@Values2




 历史版本

备注 修改日期 修改人
内容更新 2024-01-26 15:57:49[当前版本] 周杨

知识分享平台 -V 5.1.4 -大信谛威