Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uzyskać odpowiedni tekst oddzielony przecinkami dla ciągu kodów oddzielonych przecinkami?

Mogą istnieć prostsze rozwiązania, aby to zrobić, ale jest jeden sposób.

Struktura tabeli

create table Locations(LocationID int, Location varchar(50))
create table OtherTable(ID int, Locations varchar(max))

Dane testowe

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')

Zapytanie

;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

Wynik

ID  Locations
--- ----------------------------------------
1   
2   Location <2>
3   Location <1>, Location <3>, Location <5>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dostęp do zestawów wyników z poziomu Procedury składowane Transact-SQL SQL Server

  2. Nie mogę uruchomić przeglądarki SQL Server

  3. SQL Server:Zmień wszystkie wielkie litery na prawidłowe litery/tytuły

  4. Początkowe połączenie z programem SQL Server Połączenie jest wolne. Czemu?

  5. Kod zapłonowy Wstaw dane MSSQL