-- 1. 일자 컬럼이 Date형 인 경우 -- SELECT 사원번호, 사원명 , SUM(연장근무시간) FROM 테이블 WHERE TO_CHAR(일자, 'd') NOT IN ('1', '7') GROUP BY 사원번호, 사원명, TRUNC(일자, 'd') HAVING SUM(연장근무시간) > 12 ; -- 2. 일자 컬럼이 yyyymmdd 형식의 Varchar2형인 경우 -- SELECT 사원번호, 사원명 , SUM(연장근무시간) FROM 테이블 WHERE TO_CHAR(TO_DATE(일자, 'yyyymmdd'), 'd') NOT IN ('1', '7') GROUP BY 사원번호, 사원명, TRUNC(TO_DATE(일자, 'yyyymmdd'), 'd') HAVING SUM(연장근무시간) > 12 ;
CREATE TABLE TEST ( 일자 VARCHAR(8), 사원번호 VARCHAR(10), 사원명 VARCHAR(10), 연장근무시간 INT ); INSERT INTO TEST VALUES('20130304', 'A001', '홍길동', 1); INSERT INTO TEST VALUES('20130305', 'A001', '홍길동', 2); INSERT INTO TEST VALUES('20130306', 'A001', '홍길동', 1); INSERT INTO TEST VALUES('20130307', 'A001', '홍길동', 3); INSERT INTO TEST VALUES('20130308', 'A001', '홍길동', 1); INSERT INTO TEST VALUES('20130309', 'A001', '홍길동', 1); INSERT INTO TEST VALUES('20130310', 'A001', '홍길동', 1); INSERT INTO TEST VALUES('20130311', 'A001', '홍길동', 1); INSERT INTO TEST VALUES('20130307', 'A002', '길만득', 9); INSERT INTO TEST VALUES('20130308', 'A002', '길만득', 2); INSERT INTO TEST VALUES('20130309', 'A002', '길만득', 3); INSERT INTO TEST VALUES('20130310', 'A002', '길만득', 5); INSERT INTO TEST VALUES('20130311', 'A002', '길만득', 2); INSERT INTO TEST VALUES('20130312', 'A002', '길만득', 1); INSERT INTO TEST VALUES('20130313', 'A002', '길만득', 1); INSERT INTO TEST VALUES('20130321', 'A002', '길만득', 2); SELECT 년월, 주차, 사원번호, SUM(연장근무시간) FROM ( SELECT TEST.*, TO_CHAR(TO_DATE(일자), 'YYYY-MM') 년월, CEIL((SUBSTR(일자, 7, 2) + TO_CHAR(TO_DATE(SUBSTR(일자 , 1, 6)||'01', 'YYYYMMDD'), 'D') - 1) / 7) 주차 FROM TEST ) GROUP BY 년월, 주차, 사원번호 ORDER BY 년월, 주차, 사원번호 ;