Застрял на Unpivot / Pivot Combo SQL Server 2008 - PullRequest
4 голосов
/ 10 марта 2012

Кажется, я не могу решить эту проблему, когда мне кажется, что мне нужно сочетание pivot и unpivot в 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

Мне нужно повернуть так, чтобы месяцы были в виде столбцов, но отключить, чтобы я получил Счетчик, Бюджетный, Фактический в виде строк, так что это похоже на ...

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

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

Помощь !!!

Ответы [ 2 ]

5 голосов
/ 10 марта 2012
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 .

0 голосов
/ 10 марта 2012

Вам нужно сделать 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

будет выглядеть как твой пример

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...