转自: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