TSQL-Unpivot несколько столбцов
Как я могу открепить несколько столбцов в "one"?
Прямо сейчас у меня есть unpivot для каждого столбца, но это создает много пустых строк.
Смотрите скриншот, пожалуйста.
Вверху вы видите входные данные. В данный момент я сижу за столом посередине с этим кодом:
SELECT [ID], [RowNumber], [Year], [Sales] FROM (
SELECT ID, RowNumber, [Sales 2013] as [2013], [Sales 2014] as [2014]
FROM mytable) p UNPIVOT (
[Sales] FOR [Year] IN ([2013], [2014]) )AS unpvt ;
Но я думаю, что было бы гораздо лучше добраться до нижней структуры таблицы, так как фактические данные содержат больше столбцов и больше лет, чтобы иметь дело.
Вот Скрипка. с образцовыми данными.
Надеюсь, вы сможете показать мне, как туда добраться. Спасибо.2 ответа:
SELECT [ID], [RowNumber], [Year], Sales, Budget FROM mytable CROSS APPLY (VALUES (2013, [Sales 2013], [Budget 2013]), (2014, [Sales 2014], [Budget 2014]) ) V([Year], Sales, Budget)
Один из подходов заключается в том, чтобы повторять после удаления-вот так:
select [Id], [Year], [Sales], [Budget], [Actual] from (SELECT [Id], Left([Colhead], charindex(' ',[Colhead])-1) [Category], Right([Colhead], len([Colhead])-charindex(' ',[Colhead])) [Year], [Figures] FROM (SELECT * FROM mytable) p UNPIVOT ([Figures] FOR [Colhead] IN ([Sales 2013],[Sales 2014],[Budget 2013],[Budget 2014],[Actual 2013],[Actual 2014]) ) AS unpvt) as u pivot (max([Figures]) for [Category] in ([Sales], [Budget], [Actual])) as p
SQLFiddle здесь.