Как выполнить поворот в SQL для получения многоуровневых заголовков

Сводный многоуровневый заголовок без агрегирования

Не знаете, как на самом деле получить эти многоуровневые заголовки без агрегирования в сводной таблице, поскольку вы могли бы заметить текущий и желаемый макет.

With pivot_data as
(
Select * from Table1
)
Select id, 3/31/2001, 6/30/2001, 9/30/2001, 12/31/2001, 3/31/2002, 6/30/2002, 9/30/2002, 12/31/2002
from pivot_data

Pivot(Max(Comm) For Dt in (3/31/2001, 6/30/2001, 9/30/2001, 12/31/2001, 3/31/2002, 6/30/2002, 9/30/2002, 12/31/2002)) P1
Pivot(Max(Norm)) For Dt in (3/31/2001, 6/30/2001, 9/30/2001, 12/31/2001, 3/31/2002, 6/30/2002, 9/30/2002, 12/31/2002)) P2
Pivot(Max(Team)) For Dt in (3/31/2001, 6/30/2001, 9/30/2001, 12/31/2001, 3/31/2002, 6/30/2002, 9/30/2002, 12/31/2002)) P3

Я пытаюсь добиться этого макета:

    Comm    Comm    Comm    Comm    Norm    Norm    Norm    Norm
id  3/31/2018   6/30/2018   9/30/2018   12/31/2018  3/31/2018   6/30/2018   9/30/2018   12/31/2018
1   55  0   54  0   0   3   0   3
2   0   41  0   43  3   0   4   0


From Current layout:

id  Date        Comm    Norm
1   3/31/2018   55  
1   6/30/2018       3
1   9/30/2018   54  
1   12/31/2018      3
2   3/31/2018       3
2   6/30/2018   41  
2   9/30/2018       4
2   12/31/2018  43

1 ответ

Вы можете использовать условную агрегацию следующим образом:

select id,
    sum(case when Date = '3/31/2018' then Comm end) as 'Comm 3/31/2018',
    sum(case when Date = '6/30/2018' then Comm end) as 'Comm 6/30/2018',
    sum(case when Date = '9/30/2018' then Comm end) as 'Comm 9/30/2018',
    sum(case when Date = '12/31/2018' then Comm end) as 'Comm 12/31/2018',
    sum(case when Date = '3/31/2018' then Norm end) as 'Norm 3/31/2018',
    sum(case when Date = '6/30/2018' then Norm end) as 'Norm 6/30/2018',
    sum(case when Date = '9/30/2018' then Norm end) as 'Norm 9/30/2018',
    sum(case when Date = '12/31/2018' then Norm end) as 'Norm 12/31/2018'
from mytable
group by id
Другие вопросы по тегам