如下图将结果集1(图1)转换为结果集2(图2)
ID name value
----------- -------------------- ----------
1 张三 aaa
2 张三 ssss
3 张三 ddd
4 张三 fff
5 李四 ggg
6 李四 hhhh
7 李四 jjj
8 李四 kkk
9 李四 ll
图1
name Two
-------------------- ---------------------------
李四 ggg,hhhh,jjj,kkk,ll
张三 aaa,ssss,ddd,fff
图2
SQL语句:
并且利用 for xml path 可以将多行中的一列以任意效果显示!如:
name Two
-------------------- --------------------------------------
李四 {ggg},{hhhh},{jjj},{kkk},{ll}
张三 {aaa},{ssss},{ddd},{fff}
等等。
将上面的结果集反止:
use City;
go
Set nocount on
if object_id('tb') is not null
drop table tb
go
create table tb([name] nvarchar(4),[value] nvarchar(9))
insert tb
select '张三','1,2,3,4' union all
select '李四','a,s,d,f,g'
go
SELECT a.[name],b.[value]
FROM (SELECT [name],[value]=CAST('<v>'+REPLACE([value],',','</v><v>')+'</v>' AS xml) FROM tb) a
OUTER APPLY (SELECT [value]=T.C.value('.','varchar(50)') FROM a.[value].nodes('/v') AS T(C)) b
就由原来的:
name value
---- ---------
张三 1,2,3,4
李四 a,s,d,f,g
转为:
name value
---- ------
张三 1
张三 2
张三 3
张三 4
李四 a
李四 s
李四 d
李四 f
李四 g