SQL结果集转换--附多行转为一列

时间:2021-08-29 10:32:30

如下图将结果集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