-->创建测试数据
if object_id('tb') is not null drop table tb
go
create table tb(id int identity primary key,name nvarchar(2))
go
insert into tb(name)
select '张三' union all
select '李四' union all
select '王五'
-->SQL查询
---->合并列值
;with t as
(
select id, cast(stuff((select ','+name from tb for xml path('')),1,1,'') as varchar(20)) [value] from tb
)
select * from t
/*
合并效果:
----------------
id value
----------- --------------------
1 张三,李四,王五
2 张三,李四,王五
3 张三,李四,王五
(3 行受影响)
*/
---->拆分列值
select a.id, b.[value]
from (
select id, [value] = convert(xml,'<v>' + replace([value], ',', '</v><v>') + '</v>') from t
) as a
outer apply (
select value = n.v.value('.', 'varchar(10)') from a.[value].nodes('/v') n(v)
) as b
/*
-->拆分效果
--------------
id value
----------- ----------
1 张三
1 李四
1 王五
2 张三
2 李四
2 王五
3 张三
3 李四
3 王五
(9 行受影响)
*/