sql server 行转列、列转行


stuff() 函数用于从源字符串中删除给定长度的字符序列,并从指定的起始索引插入给定的字符序列。
STUFF (source_string, start, length, change_string)

  source_string:字符数据

 start :指定删除和插入的开始位置

 length :指定要删除的字符数

 change_string : 替换start 到 length 的字符数据

多行转成一列

select  ID,
Names=stuff((select ','+bb.Name 
from 
(
select ID , Name
from b_user
) bb
where  bb.ID=aa.ID for xml path('')),1,1,'') 
from   b_user aa
group by ID

select
ID, Names=stuff((select ','+bb.Name from ( select ID , Name from b_user ) bb where bb.ID=aa.ID for xml path(''),type).value('.','nvarchar(max)'),1,1,'') 在转行的过程中处理特殊符号 如:& from b_user aa group by ID
一列转多行  
id Name
1 | 张三,李四
转为
id Name
1 | 张三
1 | 李四
SELECT a.[ID],b.[Name] FROM ( SELECT [ID],[Name]
=CAST('<v>'+REPLACE([Name],',','</v><v>')+'</v>' AS xml) FROM User) a OUTER APPLY ( SELECT Name=T.C.value('.','nvarchar(50)') FROM a.[Name].nodes('/v') AS T(C) ) b

 

posted @ 2023-11-02 10:31  尘雾  阅读(225)  评论(0编辑  收藏  举报