sql-server-2005 - 如何为一串逗号分隔代码获取相应的逗号分隔文本?

标签 sql-server-2005 tsql

我有一张表,其中有一列名为“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/

相关文章:

sql-server-2005 - SQL Server 性能 - 运行即席查询与在存储过程中编译的查询

sql - 存储过程内循环内的事务

sql - 如何使用sql从日期字段按月分组

sql - 创建数据库::错误

sql - 使用单个 SQL 查询将列值放入变量中

sql-server - T-SQL 事务语法

sql - 如何查看Check Constraint的内容

sql - 如何获取上传到 SQL-Server 的文件大小?

c++ - ODBC Execute/Fetch of SQL 2005 存储过程结果集不能使用表@variable

sql - 对于 Nvarchar(Max),我在 SQL 中只能获取 4000 个字符?