- --使用 自连接、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
多行转一行
最新推荐文章于 2022-12-09 13:50:49 发布