打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQL SERVER 2005 中使用for xml path('')和stuff合并显示多行数据到一行中
网上看到这篇有关SQL Stuff的用法,感觉挺好的,发出来跟有同感的技术人员分享.

--使用 自连接、for xml path('')和stuff合并显示多行数据到一行中

--注
--1、计算列可以不用包含在聚合函数中而直接显示,如下面语句的val。
--2、for xml path('') 应该应用于语句的最后面,继而生成xml。
--3、for xml path('root')中的path参数是生成的xml最顶级节点。
--4、字段名或是别名将成为xml的子节点,对于没有列名(字段+'')或是没有别名的字段将直接显示。如[value] +','则是用,分隔的数据(aa,bb,)。
--5、对于合并多行数据显示为一行数据时使用自连。

--生成测试表并插入测试数据
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go

--第一种显示
select id, [val]=(
select [value] +',' from tb as b where b.id = a.id for xml path('')) from tb as a
--第一种显示结果
--1 aa,bb,
--1 aa,bb,
--2 aaa,bbb,ccc,
--2 aaa,bbb,ccc,
--2 aaa,bbb,ccc,


--第二种显示
select id, [val]=(
select [value] +',' from tb as b where b.id = a.id for xml path('')) from tb as a
group by id
--第二种显示结果
--1 aa,bb,
--2 aaa,bbb,ccc,


--第三种显示
select id, [val]=stuff((
select ','+[value] from tb as b where b.id = a.id for xml path('')),1,1,'') from tb as a
group by id
--第三种显示结果
--1 aa,bb
--2 aaa,bbb,ccc


--典型应用
--AMD_GiftNew中获取所有的管理员ID
--select adminIds = stuff((select ','+cast(UserId as varchar) from MM_Users where RoleId = 1 and flag =0 for xml path('')),1,1,'')
--典型应用显示结果
--3,27

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
for xml path
SQL中合并多行记录的方法总汇
sqlserver中,如何把一列中的多行数据在一行显示
SQL SERVER:select 字符串拼接问题
sql server合并字符串
Sql Server合并多行询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服