DEPTMST (테이블) - 부서 마스터코드
DPET 부서코드 (필드)
LUNCH (테이블) - 점심식사 발권
DATE 일자
DEPT 부서코드
USID 유저
부서마다 점심식사권을 발급하는데...
한달동안 일자별 부서별 점심 건수를 파악하려고 하는데...
특정 일마다 A라는 부서 직원이 한명도 점심식사권을 발급하지 않은건은 0으로 표시를 하고 싶습니다. - (LUNCH 테이블에 데이터가 존재하지 않음)
어떻게 해야할까요? 항상 있는데이터 기준으로 조회하다가 특정일마다 존재하지 않는 데이터는 0으로 나 올 수 있게 하려니 머리가 안돌아가네요^^;
WITH deptmst AS ( SELECT 10 dept, '오라클' dname FROM dual UNION ALL SELECT 20, '구루비' FROM dual ) , lunch AS ( SELECT '20191001' dt, 10 dept, 1 usid FROM dual UNION ALL SELECT '20191001', 10, 2 FROM dual UNION ALL SELECT '20191001', 20, 3 FROM dual UNION ALL SELECT '20191002', 20, 4 FROM dual UNION ALL SELECT '20191002', 20, 5 FROM dual ) , calendar AS ( SELECT TO_CHAR(dt + LEVEL - 1, 'yyyymmdd') dt FROM (SELECT TO_DATE('201910', 'yyyymm') dt FROM dual) CONNECT BY LEVEL <= LAST_DAY(dt) - dt + 1 ) SELECT d.dept , d.dname , c.dt , COUNT(l.dt) cnt FROM deptmst d CROSS JOIN calendar c LEFT OUTER JOIN lunch l ON d.dept = l.dept AND c.dt = l.dt GROUP BY d.dept, d.dname, c.dt ORDER BY d.dept, c.dt ;