2011-04-12 42 views
3

我有一個表,有一個名爲「位置」的列在varchar(max)類型中。它攜帶一串逗號分隔的代碼,例如'1, 3, 4'。另一方面,我有一張將這些代碼映射到某些位置的表格,例如,如何獲取用逗號分隔的代碼字符串的相應逗號分隔文本?

1 -- British 
2 -- New Zealand 
3 -- Hong Kong 
4 -- Taiwan 

我的問題是,我正在做圖,該將映射並替換列「位置」爲相應的逗號分隔的文本,例如內容'1, 3, 4'將爲'British, Hong Kong, Taiwan'

這對公司項目來說確實很緊急,敬請告知。

謝謝!

問候, 威廉

回答

3

有可能是簡單的解決方案要做到這一點,但這裏是一個辦法。

表結構

create table Locations(LocationID int, Location varchar(50)) 
create table OtherTable(ID int, Locations varchar(max)) 

測試數據

insert into Locations values(1, 'Location <1>') 
insert into Locations values(2, 'Location <2>') 
insert into Locations values(3, 'Location <3>') 
insert into Locations values(4, 'Location <4>') 
insert into Locations values(5, 'Location <5>') 

insert into OtherTable values (1, '') 
insert into OtherTable values (2, '2') 
insert into OtherTable values (3, '1, 3 ,5') 

查詢

;with cte as 
(
    select 
    T.ID, 
    coalesce(L.Location, '') as Location 
    from OtherTable as T 
    cross apply 
     (select cast('<r>'+replace(T.Locations, ',', '</r><r>')+'</r>' as xml)) LocXML(XMLCol) 
    cross apply 
     LocXML.XMLCol.nodes('r') LocID(IDCol) 
    left outer join Locations as L 
     on L.LocationID = LocID.IDCol.value('.', 'int') 
) 
select 
    C1.ID, 
    stuff((select ', '+C2.Location 
     from cte as C2 
     where C1.ID = C2.ID 
     for xml path(''), type).value('text()[1]', 'nvarchar(max)'), 1, 2, '') as Locations 
from cte as C1 
group by C1.ID 

結果

ID Locations 
--- ---------------------------------------- 
1 
2 Location <2> 
3 Location <1>, Location <3>, Location <5>