Для облегчения запросов предварительно выполним
alter session set NLS_DATE_LANGUAGE = RUSSIANПоложим, в текущем месяце мы сделали 5 и 8 скворечников, а в следующем сделаем -5 и -8.
select pk, initcap(to_char(pivot_key, 'MONTH')) pivot_key, sum(value) value from (select 1 pk, sysdate pivot_key, 5 value from dual union select 1, sysdate, 8 from dual union select 1, sysdate + 31, -5 from dual union select 1, sysdate + 31, -8 from dual) group by pk, initcap(to_char(pivot_key, 'MONTH'))Развернем выборку, задав месяцы как колонки:
with a as
(select pk,
initcap(to_char(pivot_key, 'MONTH')) pivot_key,
sum(value) value
from (select 1 pk, sysdate pivot_key, 5 value from dual
union
select 1, sysdate, 8 from dual
union
select 1, sysdate + 31, -5 from dual
union
select 1, sysdate + 31, -8 from dual)
group by pk, initcap(to_char(pivot_key, 'MONTH'))
)
select pk, "'Январь'_MON" Jan,
"'Февраль'_MON" Feb
from (select *
from a pivot(sum(value) mon
FOR pivot_key IN('Январь',
'Февраль')
)
);PK JAN FEB
---------- ---------- ----------
1 Как видим, результат неверный. Обозначим месяц по-другому.with a as
(select pk,
to_char(pivot_key, 'MM') pivot_key,
sum(value) value
from (select 1 pk, sysdate pivot_key, 5 value from dual
union
select 1, sysdate, 8 from dual
union
select 1, sysdate + 31, -5 from dual
union
select 1, sysdate + 31, -8 from dual)
group by pk, to_char(pivot_key, 'MM')
)
select pk, "'01'_MON" Jan,
"'02'_MON" Feb
from (select *
from a pivot(sum(value) mon
FOR pivot_key IN('01',
'02')
)
);PK JAN FEB
---------- ---------- ----------
1 13 -13 Непонятно, в чем причина ошибки, но точно не в кириллических названиях.Вывод: для опорного поля в функции PIVOT использовать максимально простые, желательно циферные, псевдонимы.
Комментариев нет :
Отправить комментарий