发布时间:2020-08-10编辑:佚名阅读(1574)
表结构,数据如下:
需要得到结果:
即:group by id, 求string的和(字符串相加)
CREATE TABLE tb ( id INT, string VARCHAR(10)); INSERT INTO tb VALUES ( 1, 'aa' ); INSERT INTO tb VALUES ( 1, 'bb' ); INSERT INTO tb VALUES ( 2, 'aaa' ); INSERT INTO tb VALUES ( 2, 'bbb' ); INSERT INTO tb VALUES ( 2, 'ccc' ); SELECT * FROM dbo.tb;
方法1
SELECT * FROM ( SELECT DISTINCT id FROM tb ) A OUTER APPLY ( SELECT stringS = STUFF(REPLACE(REPLACE(( SELECT string FROM tb N WHERE id = A.id FOR XML AUTO ), '<N string="', ','), '"/>', ''), 1, 1, '')) N;
方法2
SELECT id, stringS = STUFF(( SELECT ',' + string FROM tb t WHERE id = tb.id FOR XML PATH('')), 1, 1, '')FROM tb GROUP BY id;
删除表
DROP TABLE tb;
合并列值的逆过程
--创建表 CREATE TABLE tb ( id INT, stringS VARCHAR(30)); --插入数据 INSERT INTO tb VALUES ( 1, 'aa,bb' ); INSERT INTO tb VALUES ( 2, 'aaa,bbb,ccc' ); --查询原始数据 SELECT * FROM dbo.tb; --查询拆分数据 SELECT A.id, B.string FROM ( SELECT id, stringS = CONVERT(XML, '<root><v>' + REPLACE(stringS, ',', '</v><v>') + '</v></root>')FROM tb ) A OUTER APPLY ( SELECT string = N.v.value('.', 'varchar(100)')FROM A.stringS.nodes('/root/v') N(v) ) B; --删除表 DROP TABLE tb;
0人
0人
0人
0人