sql >> データベース >  >> RDS >> Sqlserver

コンマ区切りコードの文字列に対応するコンマ区切りテキストを取得する方法は?

    これを行うためのより簡単な解決策があるかもしれませんが、ここに 1 つの方法があります。

    テーブル構造

    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. Djangoのsyncdb(mac OS 10.7.5)を実行しているときのPostgresqlソケットエラー

    2. MySQLJOINとLEFTJOINの違い

    3. ORA-01034:ORACLEは使用できませんORA-27101:共有メモリレルムが存在しません

    4. CASE ..OracleSQLのWHEN式