SELECT
TO_CHAR(TO_DATE(V.MON), 'MM') AS MON
, Z.COL_A
...
FROM
-- Z : 가져올 데이터 테이블
(
SELECT
TO_CHAR(TO_DATE(BILL_DT), 'MM') AS MON,
COL_A,
FROM ...
AND 날짜컬럼 BETWEEN TO_DATE(SUBSTR('202101',0,4) || '0101', 'YYYY-MM-DD') AND TO_DATE('202110' || '31', 'YYYY-MM-DD') -- /* 1월 ~ 12월 조건 */
GROUP BY TO_CHAR(TO_DATE(날짜컬럼), 'MM'), COL_A, ... -- 날짜값 형반환 주의
ORDER BY MON -- /* 1월 ~ 12월 정렬 */
) Z
, (
-- V : 날짜 뷰(1월1일 ~ 12월 31일)
SELECT TO_DATE(SUBSTR('202101',0,4) || '0101','YYYY-MM-DD') + LEVEL - 1 AS MON
FROM dual
CONNECT BY LEVEL <= (TO_DATE(SUBSTR('202110',0,4) || '1231','YYYY-MM-DD') - TO_DATE(SUBSTR('202101',0,4) || '0101','YYYY-MM-DD') + 1)
) V
WHERE V.MON = Z.MON(+) -- right outer join
GROUP BY
TO_CHAR(TO_DATE(V.MON), 'MM')
, Z.COL_A
...
ORDER BY MON