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