Запрос на объединение значений столбцов - PullRequest
0 голосов
/ 27 сентября 2019

Нужна помощь в формировании SQL-запроса

CREATE TABLE #TempTable(
        [ID] [int] NULL,
        [Source] char(1) NULL,
        [Destination] char(1) NULL
    ) 

insert into #TempTable values(1,'A','B')
insert into #TempTable values(1,'B','C')
insert into #TempTable values(1,'C','D')
insert into #TempTable values(2,'A','B')

Попытка запроса tsql для получения следующего вывода:

ID  CombinedValues
1   A,B,C,D
2   A,B

Обратите внимание, что мне нужен столбец 'Destination' последнегостроки.

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

В приведенном ниже запросе используется row_number() для идентификации первой строки из остальных.Только для первой строки добавляется Source для объединения

; with cte as
(
    select  ID, [Source], [Destination], 
        r = row_number() over (partition by ID order by [Source])
    from    #TempTable
)
select  ID,
    ( select case when r = 1 then [Source] else '' end 
          + ',' + [Destination] 
      from  cte x 
      where x.ID = t.ID for xml path('')
     ) as CombinedValues
from    cte t
group by ID
0 голосов
/ 27 сентября 2019
    DECLARE @LastID AS INT
    SELECT @LastID=MAX(ID) FROM #TempTable

    DROP TABLE IF EXISTS #TempTbl2
    SELECT  * INTO #TempTbl2 FROM   
    (
    SELECT * FROM (
    SELECT ID,SOURCE FROM #TempTable WHERE ID<>@LastID
    UNION ALL
    SELECT ID,Destination FROM #TempTable WHERE ID<>@LastID
    ) AS TMP_TBL 
    GROUP BY ID,SOURCE
    ) AS TMP_TBL2

    select ID,
    STRING_AGG( ISNULL(Source, ' '), ',') AS CombinedValues from #TempTbl2 WHERE ID<>@LastID
    GROUP  BY ID 
    UNION ALL
    SELECT TOP 1 ID,source from #TempTable WHERE ID=@LastID 

+----+----------------+
| ID | CombinedValues |
+----+----------------+
|  1 | A,B,C,D        |
|  2 | A              |
+----+----------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...