2011-04-12 32 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>