안녕하세요. 퇴근들 하셨는지 모르겠네요..ㅎㅎㅎ 저는 일을 하고 있습니다!
질문하나 올리겠습니다..
사원별 스케쥴을 뽑으면 데이터가 종대로 나오게 되는데요 이를 아래 그림처럼 PIVOT된 형태로 보여주고싶습니다...
PIVOT으로 해보려고 시도를 해봤는데 기준이 되는 코드가 아니라 근무한 YMD의 일자만 짤라서 나열해야되고 근무 일자
관련 컬럼은 10개 고정입니다... 그리고 총 시간 컬럼은 근무일 * 8 (근무일 카운트) 입니다..
어떻게 해야할지 모르겠습니다..
도와주시면 정말 정말 감사하겠습니다..
근무 일정 스키마
근무부서 코드 DUT_DEPT_CD(PK) 사번 EMP_NO(PK) 근무일자(YYYYMMDD) DUT_YMD(PK)
근무 구분코드 DUT_GB_CD 리마커 RMK 요일 DAY 순위RANKING
자격증 스키마
사번 일련번호 자격면허코드 자격면혀번호
EMP_NO(PK) SEQ(PK) QULFLCNS_CD QULFLCNS_NO
SELECT * FROM ( SELECT EMP_NO , (SELECT KOR_NM FROM MIJ_EMPLOYE WHERE EMP_NO = A.EMP_NO) AS KOR_NM , (SELECT QULFLCNS_NO FROM MIJ_LICENCE WHERE EMP_NO = A.EMP_NO AND QULFLCNS_CD = 'W03') AS QULFLCNS_NO , SUBSTR(DUT_YMD,-2) AS DUT_MM FROM MID_DUTYSCHEDULE A WHERE DUT_GB_CD = '37' AND DUT_DEPT_CD = '03171000' AND DUT_YMD LIKE '200707' || '%') PIVOT (MAX(DUT_MM) FOR DUT_MM IN(01 AS "1",2 AS "2",3 AS "3",4 AS "4",5 AS "5",6 AS "6",7 AS "7",8 AS "8",9 AS "9",10 AS "10"))
--이런 식으로 할려고 했으나.. 얼토당토 않네요..
WITH MID_DUTYSCHEDULE AS ( SELECT 'A' DUT_DEPT_CD, '1' EMP_NO, '20160901' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '1' EMP_NO, '20160902' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '1' EMP_NO, '20160903' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '1' EMP_NO, '20160905' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '1' EMP_NO, '20160910' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '1' EMP_NO, '20160913' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '1' EMP_NO, '20160917' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '1' EMP_NO, '20160931' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '2' EMP_NO, '20160903' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '2' EMP_NO, '20160904' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '2' EMP_NO, '20160907' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '2' EMP_NO, '20160909' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '2' EMP_NO, '20160910' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '2' EMP_NO, '20160911' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '2' EMP_NO, '20160913' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '2' EMP_NO, '20160916' DUT_YMD FROM DUAL UNION ALL SELECT 'A' DUT_DEPT_CD, '2' EMP_NO, '20160921' DUT_YMD FROM DUAL ) SELECT EMP_NO, DAY1, DAY2, DAY3, DAY4, DAY5, DAY6, DAY7, DAY8, DAY9, DAY10 , (CNT*8)||'('||CNT||')' TOTH FROM ( SELECT EMP_NO,SUBSTR(DUT_YMD,-2) DUT_MM , ROW_NUMBER() OVER(PARTITION BY EMP_NO ORDER BY DUT_YMD) RN , COUNT(1) OVER(PARTITION BY EMP_NO) CNT FROM MID_DUTYSCHEDULE WHERE DUT_YMD LIKE '201609%' AND DUT_DEPT_CD = 'A' ) PIVOT (MAX(DUT_MM) FOR RN IN (1 AS "DAY1",2 AS "DAY2",3 AS "DAY3",4 AS "DAY4",5 AS "DAY5" ,6 AS "DAY6",7 AS "DAY7",8 AS "DAY8",9 AS "DAY9",10 AS "DAY10"))
참고하셔서 작성해보세요.