SQL合并列值和拆分列值

发布时间: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;

    关键字: SQL 合并列值 拆分列值


鼓掌

0

正能量

0

0

呵呵

0


评论区