SQL транспонировать столбцы в строки - PullRequest
0 голосов
/ 28 августа 2018

Я пытался перенести это;

**ProjectNum    PillarID    BusinessPillar**
95329           29          Pillar29
95329           1           Pillar1
95354           1           Pillar1
95354           4           Pillar4
95354           7           Pillar7

В это;

**ProjectNum    Pillars**
95329           Pillar1, Pillar29
95354           Pillar1, Pillar4, Pillar7

Я смотрел на использование pivot / unpivot, и я получил это далеко

DECLARE @cols AS NVARCHAR(MAX),
    @query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(PillarID) 
                from dbo.MyTable
                group by BusinessPillar, PillarID
                order by PillarID
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')
set @query = N'SELECT ProjectNum, ' + @cols + N' from 
         (
            select ProjectNum, PillarID, BusinessPillar
            from dbo.MyTable
        ) x
        pivot 
        (
            max(BusinessPillar)
            for PillarID in (' + @cols + N')
        ) p '
exec sp_executesql @query;

Однако у меня много проблем с выяснением того, как объединить все сводные результаты в один столбец, разделенный запятыми, как в моем желаемом примере.

Любая помощь или направление приветствуется.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Попробуйте использовать LISTAGG:

SELECT ProjectNum, LISTAGG(BusinessPillar, ', ') WITHIN GROUP (ORDER BY BusinessPillar) AS PILLARS
      FROM Test
      GROUP BY ProjectNum

Подробнее о LISTAGG

0 голосов
/ 28 августа 2018

Вы можете использовать следующий запрос, чтобы получить желаемый результат:

SELECT ProjectNum, STUFF(
     (SELECT DISTINCT ', ' + BusinessPillar
      FROM Test
      WHERE ProjectNum = t.ProjectNum
      FOR XML PATH (''))
      , 1, 1, '')  AS Pillars
      FROM Test as t
      GROUP BY ProjectNum

Вот ссылка SQL Fiddle: SQL Fiddle

...