2015-04-15 3 views
1

У меня есть таблица следующим образом:Pivot в SQL для нескольких столбцов

enter image description here

Использование pivot мне нужен следующий вывод:

enter image description here

Запрос не должен использовать Union набор оператора ,

+0

Возможный дубликат: http://stackoverflow.com/questions/20111418/sql-server-transpose-rows-to-columns Вы ищете Transpose from Rows -> Columns. –

+0

Я сделал это с помощью pivot для отдельных val1 и val2 и объединил результаты для окончательного вывода. Я проверил вышеуказанную ссылку «Evaldas Buinauskas», но мне нужно, чтобы имя моего столбца было в строках .. т.е. val1 и val2 в строках. –

ответ

4

Вы можете сначала сделать UNPIVOT, чтобы включить данные в следующем формате:

enter image description here

, а затем сделать PIVOT по Type колонки:

enter image description here

Это полный рабочий пример:

DECLARE @DataSource TABLE 
(
    [CatDes] CHAR(1) 
    ,[val1] TINYINT 
    ,[val2] TINYINT 
); 

INSERT INTO @DataSource ([CatDes], [val1], [val2]) 
VALUES ('a', 1 ,2) 
     ,('b', 3 ,4) 
     ,('c', 5 ,6) 
     ,('d', 7 ,8); 

SELECT * 
FROM @DataSource 
UNPIVOT 
(
    [Value] FOR [Type] IN ([val1], [val2]) 
) UNPVT 
PIVOT 
(
    MAX([Value]) FOR [CatDes] IN ([a], [b], [c], [d]) 
) PVT 

Конечно, когда вы используете PIVOT и UNPIVOT, вы должны жестко закодировать значения столбца. Я думаю, в вашем реальном случае это не вариант, поэтому я рекомендую вам использовать динамический оператор T-SQL - построить инструкцию в виде строки, а затем выполнить ее с помощью sp_executesql.

Смежные вопросы