Застрял на Unpivot/Pivot Combo SQL Server 2008

Кажется, я не могу решить эту проблему, когда мне кажется, что в SQL Server 2008 мне нужна комбинация опорных точек и неволей:

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

Sale | Month | Count | Budgeted | Actual
------------------------------------------------
NewSale | 1 | 120 | 45.23 | 50.10
NewSale | 2 | 30 | 3.10 | 1.2
NewSale | 3 | 70 | 45.00 | 100.32

Мне нужно крутить так, чтобы месяцы были столбцами, но не были открыты, поэтому я получаю Count, Budgeted, Actual как строки, так что это так...

Type | 1 | 2 | 3
-----------------------------------
Count | 120 | 30 | 70
Budgeted | 45.23 | 3.10 | 45.00
Actual | 50.10 | 1.2 | 100.32

Я пробовал это до сих пор, но я не могу понять, как разместить здесь опорную точку:

select *
from YTD
pivot
( sum([Count]), sum([Budgeted]), sum([Actual]) for [Month] in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])
)
as figures

Это дает мне синтаксическую ошибку, так как вы не можете иметь больше одного вычисления в своде (насколько я понял из ошибки.

Help!!!

2 ответа

declare @T table
( Sale varchar(10), [Month] int, [Count] int, Budgeted money, Actual money
)
insert into @T values
('NewSale', 1, 120, 45.23, 50.10),
('NewSale', 2, 30, 3.10, 1.2),
('NewSale', 3, 70, 45.00, 100.32)
select [Type], [1], [2], [3]
from
( select [Month], cast([Count] as money) as [Count], Budgeted, Actual from @T
) as T
unpivot
( Value for [Type] in ([Count], Budgeted, Actual)
) as U
pivot
( sum(Value) for [Month] in ([1], [2], [3])
) as P

Попробуйте SE-Data.


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

Например

Select 'Count' as [Type], 120 AS 1, 40 AS 2, 70 AS 3 UNION ALL Select 'Budgeted' as [Type], 45.23 AS 1, 3.10 AS 2, 45.00 AS 3 UNION ALL Select 'Actual' as [Type], 50.1 AS 1, 1.2 AS 2, 100.32 AS 3

Будет выглядеть как ваш пример

Так что просто замените каждый из этих элементов пионом, который возвращает нужную строку, и вы GTG

licensed under cc by-sa 3.0 with attribution.