SELECT EMPL_NUMB, OVTM_DATE
, CASE WHEN OVER_TIME1 IS NOT NULL THEN OVER_TIME1 + OVER_TIME2
ELSE TO_NUMBER(SF_GET_DAYTOTIME(OVER_TIME,'24')) END AS OVER_TIME
, OVER_TIME1
, OVER_TIME2
, SUM(CASE WHEN OVER_TIME1 IS NOT NULL THEN OVER_TIME1 + OVER_TIME2
ELSE TO_NUMBER(SF_GET_DAYTOTIME(OVER_TIME,'24')) END) OVER (ORDER BY OVTM_DATE ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS TOTL_TIME -- 누적금액
FROM (
SELECT B.* FROM (
SELECT '000000' AS EMPL_NUMB, TO_CHAR(TO_DATE('20131107','YYYYMMDD') + LEVEL - 1, 'YYYYMMDD') AS OVTM_DATE
FROM DUAL
CONNECT BY LEVEL < 8
) A INNER JOIN TH_OVERTIME B on B.EMPL_NUMB = A.EMPL_NUMB AND B.OVTM_DATE = A.OVTM_DATE
LEFT OUTER JOIN TH_HOLDAY C
on C.HOLI_DATE = A.OVTM_DATE
WHERE C.HOLI_DATE IS NULL -- 평일
OR C.HOLI_DATE = 'HR420002' -- 토요일
OR B.WORK_STIME IS NOT NULL
)
)
, CASE WHEN OVER_TIME1 IS NOT NULL THEN OVER_TIME1 + OVER_TIME2
ELSE TO_NUMBER(SF_GET_DAYTOTIME(OVER_TIME,'24')) END AS OVER_TIME
, OVER_TIME1
, OVER_TIME2
, SUM(CASE WHEN OVER_TIME1 IS NOT NULL THEN OVER_TIME1 + OVER_TIME2
ELSE TO_NUMBER(SF_GET_DAYTOTIME(OVER_TIME,'24')) END) OVER (ORDER BY OVTM_DATE ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS TOTL_TIME -- 누적금액
FROM (
SELECT B.* FROM (
SELECT '000000' AS EMPL_NUMB, TO_CHAR(TO_DATE('20131107','YYYYMMDD') + LEVEL - 1, 'YYYYMMDD') AS OVTM_DATE
FROM DUAL
CONNECT BY LEVEL < 8
) A INNER JOIN TH_OVERTIME B on B.EMPL_NUMB = A.EMPL_NUMB AND B.OVTM_DATE = A.OVTM_DATE
LEFT OUTER JOIN TH_HOLDAY C
on C.HOLI_DATE = A.OVTM_DATE
WHERE C.HOLI_DATE IS NULL -- 평일
OR C.HOLI_DATE = 'HR420002' -- 토요일
OR B.WORK_STIME IS NOT NULL
)
)
'프로그래밍 > 오라클' 카테고리의 다른 글
TO_CHAR 함수 (0) | 2017.04.20 |
---|---|
테이블스페이스 잔여 용량 확인하기 (0) | 2013.09.30 |
제약조건 조회하기 (0) | 2010.12.26 |