2014-09-05 2 views
0

У меня есть таблица на SQL Server со следующими данными.Как мне группировать столбцы поворота?

Name Type  Amount 
------------------------------ 
ABC  Opening  100 
CBD  Invoice  200 
ABC  Spreadsheet 250 
FBD  Closing  400 

Я пытаюсь создать сводную таблицу на основе выше, однако, я также пытаюсь разделить столбец типа в 3-х различных столбцов.

  • Открытие
  • Закрытие
  • активность (Другое)

См. Таблицу ниже Это возможно?

Name Opening Activity Closing 
---------------------------------------- 
ABC  100   200   0 
CBD  0   250   0 
FBD  0   0  400 

код до сих пор

select * 
from 
    (
     select [Name] 
       ,[Type] 
       ,[Amount] 
     from my_Table 
    ) a 
    pivot(sum(Amount) 
    for Type in (Opening], [Closing]) 
    )as pvt 

Как я могу идти об этом?

ответ

3

Я предлагаю сделать это с совокупным выражением функции СЛУЧАЙ:

select 
    name, 
    sum(case when type = 'Opening' then Amount else 0 end) Opening, 
    sum(case when type not in ('Opening', 'Closing') then Amount else 0 end) Activity, 
    sum(case when type = 'Closing' then Amount else 0 end) Closing 
from my_table 
group by name; 

См SQL Fiddle with Demo. Вы должны использовать логику CASE, чтобы смотреть конкретно на значения Opening и Closing, а затем последний столбец будет суммировать строки, где Type не является Opening или Closing.

Вы можете использовать PIVOT для получения результата, вам просто нужно связать «другие» действия, прежде чем применять функцию поворота. Вы можете сделать это с помощью подзапроса:

select name, Opening, Activity, Closing 
from 
(
    select 
    name, 
    type = case 
       when type not in ('Opening', 'Closing') 
       then 'Activity' 
       else type 
      end, 
    amount 
    from my_table 
) d 
pivot 
(
    sum(amount) 
    for type in (Opening, Activity, Closing) 
)piv; 

См SQL Fiddle with Demo

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