XML 方法對SQL列表中的值進行重新排序
XML方法對SQL列表中的值進行重新排序
/*
最近在看問題的時候看到用xml方法對SQL列表的重新排序,
方法一為原來提供的方法,方法二為後來想到的方法。
此處沒有的寫法,有興趣的可以補全。
*/
declare @t table ( id int,valuelist varchar(200))
insert @tselect 1,'1,43,3,2'
insert @tselect 2,'233,100,4455,323,223'
--方法一
;with tb as(
select id,value from @t
cross apply(select xmlcode=CAST('<row>'
cross apply xmlcode.nodes('/row')c1(xmlcode1)
cross apply(select value=c1.xmlcode1.value('.','int')) c2
)
select id
,replace((select value as 'data()'from tbwhere a.id=id order by value for xml path('')),' ',',')as datalist
from
--方法二
select id,replace(xmlcode1.value('.','varchar(200)'),' ',',') as datalist from @t
cross apply(select xmlcode=CAST('<row>'+replace(valuelist,',','</row><row>')+'</row>' as xml)) c0
cross apply(select xmlcode1=xmlcode.query('
<e>{for $i in /row
order by $i
return data($i)
}
</e>
')) c1