Выделить в несколько полей значениям одного поля

chikaginsk
Дата: 29.09.2015 14:10:41
Добрый день.
Не получается выполнить казалось бы простую вещь.
Есть таблица с данными:
raionpriznaksumma1summa2
0101G12
0101E34
0102G56
0102E78
............

Нужно сгруппировать по полю raion, а значения полей summa1 и summa2 просуммировать в четырёх разных полях.
Получиться должно примерно следующее:
raionG_sum1G_sum2E_sum1E_sum2
01011234
01025678
...............

Пытался сделать следующим скриптом, но понятно, что агрегация по полю priznak будет выводить только значения, удовлетворяющие её условию.
Прошу помощи.
chikaginsk
Дата: 29.09.2015 14:21:04
Забыл написать, что остановился на следующем селекте и впал в ступор.
select raion,
       case when max(priznak)='G' then sum(summa1) end G_sum1,
       case when max(priznak)='G' then sum(summa2) end G_sum2,
       case when max(priznak)='E' then sum(summa1) end E_sum1,
       case when max(priznak)='E' then sum(summa2) end E_sum2
from tab1
group by raion
JDS
Дата: 29.09.2015 14:26:09
chikaginsk
Забыл написать, что остановился на следующем селекте и впал в ступор.

Или так )
select raion,
       sum(case when priznak='G' then nvl(summa1, 0)) end G_sum1,
       ........
from tab1
group by raion

Ну или pivot.
Eсли значений priznak-ков дофига?
А если кол-во значений priznak-ков заранее неопределено?
Может model поможет? Или динскл? )
chikaginsk
Дата: 29.09.2015 14:44:38
JDS,

Благодарю! Чувствовал, что где-то рядом решение.
Только end внутрь скобок суммы просился:
select raion,
       sum(case when priznak='G' then nvl(summa1,0) end) G_sum1,
       sum(case when priznak='G' then nvl(summa2,0) end) G_sum2,
       sum(case when priznak='E' then nvl(summa1,0) end) E_sum1,
       sum(case when priznak='E' then nvl(summa2,0) end) E_sum2
from tab1
group by raion