/* 1 */
SELECT attend_dt,
employee1 AS empno, sum(a), sum(b)
FROM a_test
WHERE attend_dt BETWEEN '20180604' AND '20180610'
AND employee1 = '0902270001'
UNION ALL
/* 2 */
SELECT B.TEMP_DT, '', '', ''
FROM DUAL A,
(SELECT TO_CHAR(to_date('20180604', 'yyyymmdd') + LEVEL - 1, 'yyyymmdd') AS temp_dt
FROM dual
CONNECT BY level <= 7) B
a_test에 있는 특정일에 속한 사번의 attend_dt(근무일자)와 employee1(사번)을 가지고 오고 있는데요
2018년 6월을 조회조건으로 검색하면 화면에 보여주고자 하는 내용은 아래와 같습니다
주시작일자 주종료일자 사번 합계(1) 합계(2)
===========================================================
20180604 20180610 employee1 0 0
20180611 20180617 employee1 10 20
20180618 20180624 employee1 0 0
20180625 20180701 employee1 10 20
그런데 사번에 대한 (1) 에 대한 합계 정보가 없어도
주시작일자와 주종료일자는 고정으로 보여주어야 하는데...
제가 짠 위의 쿼리에서 진행이 되지 않고 있어요 ㅠㅠ
AND employee1 = '0902270001' --- 이 조건은 제가 테스를 위해 추가한거구요
1테이블에 나오는 사번에 대한 주차별 시작일자와 종료일자를 fix해서 보여줘야되는데
고수님들의 답변 부탁드립니다 ^^;;
WITH w_test AS ( SELECT ym , w , TO_CHAR(sdt + w*7-7, 'yyyymmdd') sdt , TO_CHAR(sdt + w*7-1, 'yyyymmdd') edt FROM (SELECT ym , TRUNC(TO_DATE(ym||'04', 'yyyymmdd'), 'iw') sdt FROM (SELECT '201806' ym FROM dual) ) , (SELECT LEVEL w FROM dual CONNECT BY LEVEL <= 5) WHERE TO_CHAR(sdt + w*7-4, 'yyyymm') = ym ) , a_test AS ( SELECT '0001' employee1, '20180613' attend_dt, 10 a, 20 b FROM dual UNION ALL SELECT '0001', '20180629', 10, 20 FROM dual UNION ALL SELECT '0002', '20180619', 11, 22 FROM dual ) SELECT a.ym , a.w , a.sdt , a.edt , b.employee1 , NVL(SUM(a), 0) a , NVL(SUM(b), 0) b FROM w_test a LEFT OUTER JOIN a_test b PARTITION BY (b.employee1) ON b.attend_dt BETWEEN a.sdt AND a.edt GROUP BY a.ym , a.w , a.sdt , a.edt , b.employee1 ORDER BY b.employee1, a.w ;