如下图将结果集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
本文介绍了如何使用SQL将多行数据的一列转换为一行,通过示例展示了利用FOR XML PATH和STUFF函数将结果集中多行数据合并成单行,并提供了反向转换的方法,即从一列数据拆分为多行。
1689

被折叠的 条评论
为什么被折叠?



