sql 中outer apply 和XML 并用

create table a 
(
id int,
tag varchar(100)
)
create table b
(
id int,
description nvarchar(100)
)
go
insert into a 
select 1,'1,2,3' union all
select 2,'1,3' union all
select 3,'2,3'
go
insert into b
select 1,'拉面' union all
select 2,'方便面' union all
select 3,'牛肉面'
go

with cte as
(
select id,tag,valu from 
(
select id,tag, cast(  '<r><v>'+replace(tag,',','</v><v>')+'</v></r>' as xml) tagxml from a
) aa
outer apply
(
select t.c.value('.','nvarchar(100)')  [valu] from 
aa.tagxml.nodes('/r/v') as t(c)
)bb
),temp as
(
select cte.id,tag ,description from cte left join b on cte.valu = b.id
)
select id,tag,
description = (
stuff(
(select ','+ description from temp where a.id = id and a.tag = tag for xml path(''))
,1,1,'')
)
 from temp a group by id,tag

drop table a
drop table b


 

结果:


(3 行受影响)

(3 行受影响)
id          tag                                                                                                  description
----------- ---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1           1,2,3                                                                                                拉面,方便面,牛肉面
2           1,3                                                                                                  拉面,牛肉面
3           2,3                                                                                                  方便面,牛肉面

(3 行受影响)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值