这两天在处理一个字符串拼接遇到一个问题:
老师姓名 学科
张老师 语文
张老师 数学
张老师 英语
李老师 体育
李老师 音乐
需要将上面的记录转换成:
老师姓名 学科
张老师 语文,数学,英语,
李老师 体育,音乐,
想了一些办法来处理,都感觉不是很好,后来发现SqlServer有一个for xml path的函数,挺不错的。下面就简单的说说。
一、FOR XML PATH 基本运用
select teacher,object from teach
利用for xml path后:
select teacher,object from teach for xml path
二、改变XML行节点的名称
a、根节点默认是
select teacher,object from teach for xml path('记录')
一个小技巧: 可以通过path('')来去掉根节点
select teacher,object from teach for xml path('')
b、改变字节点名称:
改变子节点名称就是给我们的记录起别名:
select teacher as '老师',object as '学科' from teach for xml path('')
一个小技巧:通过符号+号,来对字符串类型字段的输出格式进行定义
select '['+teacher+']' ,'['+object+']' from teach for xml path('')
三、字符串拼接应用
通过上面的步骤,基本可以完成文章开头的问题了:
select teacher as '老师',
(select object+',' from teach t1 where t1.teacher=t2.teacher FOR xml path ('')) as '学科'
from teach t2
group by teacher
原文链接:https://blog.csdn.net/a275838263/article/details/51118866