Вот пример, который может помочь вам сделать то, что нужно. Он основан на образце схемы Скотта, его таблица EMP
, которая содержит столбец HIREDATE
, который будет присоединен к CTE с именем months
; он использует иерархический запрос для создания «календаря» на 12 месяцев (это то, что делает предложение CONNECT BY
). Я полагаю, что это придется изменить в вашем случае.
Текущие данные:
SQL> select empno, ename, hiredate
2 from emp
3 order by hiredate;
EMPNO ENAME HIREDATE
---------- ---------- ----------
7369 SMITH 17.12.1980
7499 ALLEN 20.02.1981
7521 WARD 22.02.1981
7566 JONES 02.04.1981
7698 BLAKE 01.05.1981
7782 CLARK 09.06.1981
7844 TURNER 08.09.1981
7654 MARTIN 28.09.1981
7839 KING 17.11.1981
7900 JAMES 03.12.1981
7902 FORD 03.12.1981
7934 MILLER 23.01.1982
7788 SCOTT 09.12.1982
7876 ADAMS 12.01.1983
14 rows selected.
SQL>
Запрос, который может вам понадобиться:
SQL> with months as
2 (select add_months(date '1980-12-01', level - 1) mon
3 from dual
4 connect by level <= 12
5 )
6 select to_char(m.mon, 'mm.yyyy') mon,
7 count(e.empno)
8 from months m left join emp e on m.mon = trunc(e.hiredate, 'mm')
9 group by m.mon
10 order by m.mon;
MON COUNT(E.EMPNO)
------- --------------
12.1980 1 --> Smith
01.1981 0
02.1981 2 --> Allen, Ward
03.1981 0
04.1981 1 --> Jones
05.1981 1 --> Blake
06.1981 1 --> Clark
07.1981 0
08.1981 0
09.1981 2 --> Turner, Martin
10.1981 0
11.1981 1 --> King
12 rows selected.
SQL>