oracle sql xml path,SqlServer实现oracle10g的 wmsys.wm_concat()/使用自连接、for xml path('')和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

--第一种显示结果

--1aa,--1aa,--2aaa,bbb,ccc,--第二种显示

select id,' from tb as b where b.id = a.id for xml path('')) from tb as a

group by id

--第二种显示结果

--1aa,--第三种显示

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

--第三种显示结果

--1aa,bb

--2aaa,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值