2011-04-12 3 views
3

테이블이 있는데 "varchar (max)"유형의 "locations"라는 열이 있습니다. 쉼표로 구분 된 코드 문자열을 포함합니다. '1, 3, 4'. 다른 한편으로, 나는이 코드를 몇몇 위치에 매핑하는 테이블을 가지고있다.쉼표로 구분 된 코드 문자열에 해당하는 쉼표로 구분 된 텍스트를 가져 오는 방법은 무엇입니까?

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

내 문제, 나는지도와 해당 쉼표로 구분 된 텍스트, 예를 들어,에 열 "위치"의 내용을 대체 할 VIEW를 만들고 있어요 '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> 
관련 문제