加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer实现oracle10g的 wmsys.wm_concat()/使用自连接、for

发布时间:2020-12-12 12:44:06 所属栏目:MsSql教程 来源:网络整理
导读:--使用 自连接、for xml path('')和stuff合并显示多行数据到一行中--注--1、计算列可以不用包含在聚合函数中而直接显示,如下面语句的val。--2、for xml path('') 应该应用于语句的最后面,继而生成xml。--3、for xml path('root')中的path参数是生成的xml最
--使用 自连接、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,--1	aa,--2	aaa,bbb,ccc,--第二种显示
select id,' from tb as b where b.id = a.id for xml path('')) from tb as a
group by id
--第二种显示结果
--1	aa,--第三种显示
select id,[val]=stuff((
select ','+[value] from tb as b where b.id = a.id for xml path('')),1,'') from tb as a
group by id
--第三种显示结果
--1	aa,bb
--2	aaa,ccc


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

-- 查询处理 
--SQL2005中的方法2 
create table tb(id int,'ccc')
go 

select id,[values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')),'')
from tb
group by id

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读