sql >> Database >  >> RDS >> Sqlserver

Hoe krijg ik de corresponderende door komma's gescheiden tekst voor een reeks door komma's gescheiden codes?

Er zijn misschien eenvoudigere oplossingen om dit te doen, maar hier is een manier.

Tabelstructuur

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

Testgegevens

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

Zoekopdracht

;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

Resultaat

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



  1. Geen geschikt stuurprogramma gevonden voor jdbc:oracle:thin:@localhost:1521:XE bij het uitvoeren van een webtoepassing

  2. Gebruik samengestelde primaire sleutel als externe sleutel

  3. Update MySQL-tabel vanuit een lokaal bestand

  4. php mySQL group concat en group by