Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

अल्पविराम से अलग किए गए कोड की एक स्ट्रिंग के लिए संबंधित अल्पविराम से अलग पाठ कैसे प्राप्त करें?

ऐसा करने के लिए सरल उपाय हो सकते हैं लेकिन यह एक तरीका है।

टेबल संरचना

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>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर के माध्यम से ईमेल भेजना FAILED

  2. SQL सर्वर FILESTREAM सीमा

  3. अद्यतन पंक्ति प्राप्त करें

  4. डेटाबेस डिजाइन प्रश्न - श्रेणियाँ / उपश्रेणियाँ

  5. अधिभार समाधान विफल हुआ क्योंकि संकुचित रूपांतरण के बिना कोई भी सुलभ 'नया' नहीं कहा जा सकता है