我有一张表,其中有一列名为“locations”,其类型为 varchar(max)。它带有一串以逗号分隔的代码,例如'1, 3, 4'
。另一方面,我有一张表将这些代码映射到某些位置,例如
1 -- British
2 -- New Zealand
3 -- Hong Kong
4 -- Taiwan
我的问题是,我正在制作一个 VIEW,它将“位置”列的内容映射并替换为相应的逗号分隔文本,例如'1, 3, 4'
将是 'British, Hong Kong, Taiwan'
公司项目急,请指教。
谢谢!
问候, 威廉
最佳答案
可能有更简单的解决方案可以做到这一点,但这是一种方法。
表结构
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>
关于sql-server-2005 - 如何为一串逗号分隔代码获取相应的逗号分隔文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5631899/