Как получить соответствующий текст через запятую для строки кодов через запятую? - PullRequest
3 голосов
/ 12 апреля 2011

У меня есть таблица, есть столбец с названием "location", который относится к типу varchar (max). Он содержит строку кода, разделенного запятыми, например '1, 3, 4'. С другой стороны, у меня есть таблица, которая отображает этот код в некоторых местах, например,

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

Моя проблема в том, что я делаю ПРОСМОТР, который отображает и заменяет содержимое столбца "местоположения" на соответствующий текст через запятую, например '1, 3, 4' будет 'British, Hong Kong, Taiwan'

Это действительно актуально для проекта компании, пожалуйста, сообщите.

Спасибо!

С уважением, William

1 Ответ

3 голосов
/ 12 апреля 2011

Для этого могут быть более простые решения, но есть один способ.

Структура таблицы

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...