Как повернуть или повернуть столбцы в таблице строк в SQL - PullRequest
0 голосов
/ 15 мая 2018

Мне было интересно, как вы будете выполнять сводку для таблицы SQL с двумя столбцами строк, как показано ниже:

    ID   Label                Text
   ----  ----------          ----------
   10    Lead Source          Internet
   10    Display              Washington
   10    Sale                 Brick
   10    Colour               Blue

Into This:

   id   Lead Source   Display     Sale    Colour
   --   -----------   -------     ----    ------
   10    Internet      Washington  Brick   Blue

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Пример данных

IF OBJECT_ID('tempdb..#t') iS NOT NULL
DROP TABLE #t
;With cte(ID, Label,[Text])
AS
(
SELECT 10,'Lead Source','Internet'      UNION ALL
SELECT 10,'Display'    ,'Washington'    UNION ALL
SELECT 10,'Sale'       ,'Brick'         UNION ALL
SELECT 10,'Colour'     ,'Blue'


)
SELECT ID, Label,[Text]
INTO #t FROM cte

Использование динамического Sql

DECLARE @DyColumn Nvarchar(max),
        @Sql Nvarchar(max)


SELECT @DyColumn=STUFF((SELECT  DISTINCT ', '+QUOTENAME(Label) FROM #t ORDER BY  1 desc FOR XML PATH ('')),1,1,'')

SET @Sql='
SELECT ID,'+@DyColumn+' FRom
(
SELECT * FROM #t
)AS SRC
 PIVOT
 (
  MAX([Text]) FOR Label IN('+@DyColumn+')
 )AS Pvt1   
'
PRINT @Sql
EXEC(@Sql)

Результат

ID  Sale    LeadSource  Display     Colour
------------------------------------------
10  Brick   Internet    Washington  Blue
0 голосов
/ 15 мая 2018

Если ваш label имеет некоторый предел записи, вы можете использовать условное агрегирование:

select ID,
       max(case when label = 'Lead Source' then text end) [Lead Source],
       max(case when label = 'Display' then text end) [Display],
       max(case when label = 'Sale' then text end) [Sale],
       max(case when label = 'Colour' then text end) [Colour]
from table t 
group by ID;
0 голосов
/ 15 мая 2018

Вы можете сделать это, используя функцию поворота.

SELECT * 
FROM   tablename 
       PIVOT ( Max([text]) 
             FOR [label] IN ([Lead Source], [Display], [Sale], [Colour]) ) piv; 
...