SqlServer的for xml path函数

这两天在处理一个字符串拼接遇到一个问题:

老师姓名 学科
张老师 语文
张老师 数学
张老师 英语
李老师 体育
李老师 音乐

需要将上面的记录转换成:

老师姓名 学科
张老师 语文,数学,英语,
李老师 体育,音乐,

想了一些办法来处理,都感觉不是很好,后来发现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、根节点默认是<row></row>,我们可以通过path后面的参数改变根节点名称:

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







  • 12
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值