Apply的两个应用

APPLY比较实用,下面看两个应用。

1,字符连接

使用AdventureWorkDW2008R2

select c.ProductCategoryKey, b.name
from dbo.DimProductCategory c
cross apply(
select ','+CONVERT(nvarchar(20),s.EnglishProductSubcategoryName)
from dbo.DimProductSubcategory s
where c.ProductCategoryKey=s.ProductCategoryKey
order by
s.EnglishProductSubcategoryName
for xml path (''),type
) a(n)
cross apply(
select STUFF(a.n.value('./text()[1]','nvarchar(max)')
,1,1,'')
) b(name)
order by
c.ProductCategoryKey


结果如下

2,XML提取表

<students>
<student name="Bush">
<subjects>
<subject name="Math" score="10"/>
<subject name="English" score="20"/>
<subject name="Science" score="30"/>
</subjects>
</student>
<student name="Obama">
<subjects>
<subject name="Math" score="15"/>
<subject name="English" score="25"/>
<subject name="Science" score="35"/>
</subjects>
</student>
</students>

select t.student,t.subject,t.score
from @x.nodes('./students/student') student (rowset)
cross apply student.rowset.nodes('./subjects/subject') subject (rowset)
cross apply (
select student.rowset.value('@name','nvarchar(20)'),
       subject.rowset.value('@name','nvarchar(20)'),
       subject.rowset.value('@score','int')
       ) t (student,subject,score)
 order by     
t.student asc,
t.score desc;


结果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值