Для облегчения запросов предварительно выполним
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 использовать максимально простые, желательно циферные, псевдонимы.