사번 이름 발령순차 발령일자 발령명 발령코드
1 1234 홍길동 1 20170101 복직 01
2 1234 홍길동 2 20170101 무급휴직 02
3 1234 홍길동 6 20170501 복직 01
4 5678 김민수 7 20170901 무급휴직 02
5 5678 김민수 8 20171101 복직 01
6 3456 이철수 10 20170101 유급휴직 03
이렇게 되어있는 쿼리를 아래와 변경하고 싶습니다.
동일한 사원의 발령이 더 있을 경우 3차, 4차 이런식으로 증가가 되며
복직인 경우에는 종료로, 휴직인 경우에는 시작으로 하되 날짜순차로 해서 출력을 하고 싶습니다.
이게 혹시 가능한건가요?
사번 | 이름 | 1차시작 | 1차종료 | 1차시작발령 | 1차종료발령 | 2차시작 | 2차종료 | 2차시작발령 | 2차종료발령 |
1234 | 홍길동 | 20170101 | 복직 | 20170101 | 20170501 | 무급휴직 | 복직 | ||
5687 | 김민수 | 20170901 | 20171101 | 무급휴직 | 복직 | ||||
3456 | 이철수 | 20170101 | 유급휴직 |
쿼리 데이터는 아래제공해드립니다.
WITH TEMP AS
(
SELECT '1234' 사번, '홍길동' 이름, '1' 발령순차, '20170101' 발령일자, '복직' 발령명, '01' 발령코드 FROM dual UNION ALL
SELECT '1234', '홍길동', '2', '20170101', '무급휴직', '02' FROM dual UNION ALL
SELECT '1234', '홍길동', '6', '20170501', '복직', '01' FROM dual UNION ALL
SELECT '5678', '김민수', '7', '20170901', '무급휴직', '02' FROM dual UNION ALL
SELECT '5678', '김민수', '8', '20171101', '복직', '01' FROM dual UNION ALL
SELECT '3456', '이철수', '10', '20170101', '유급휴직', '03' FROM dual
)
SELECT * from temp
WITH temp AS ( SELECT '1234' 사번, '홍길동' 이름, 1 발령순차, '20170101' 발령일자, '복직' 발령명, '01' 발령코드 FROM dual UNION ALL SELECT '1234', '홍길동', 2, '20170101', '무급휴직', '02' FROM dual UNION ALL SELECT '1234', '홍길동', 6, '20170501', '복직' , '01' FROM dual UNION ALL SELECT '5678', '김민수', 7, '20170901', '무급휴직', '02' FROM dual UNION ALL SELECT '5678', '김민수', 8, '20171101', '복직' , '01' FROM dual UNION ALL SELECT '3456', '이철수', 10, '20170101', '유급휴직', '03' FROM dual ) SELECT * FROM (SELECT 사번, 이름 , ROW_NUMBER() OVER(PARTITION BY 사번 ORDER BY grp) 차 , MIN(DECODE(발령코드, '01', '', 발령일자)) 시작일자 , MIN(DECODE(발령코드, '01', 발령일자, '')) 종료일자 , MIN(DECODE(발령코드, '01', '', 발령명 )) 시작발령 , MIN(DECODE(발령코드, '01', 발령명 , '')) 종료발령 FROM (SELECT 사번, 이름, 발령순차, 발령일자, 발령명, 발령코드 , SUM(DECODE(발령코드, '01', 0, 1)) OVER( PARTITION BY 사번 ORDER BY 발령일자, 발령순차) grp FROM temp ) GROUP BY 사번, 이름, grp ) PIVOT ( MIN(시작일자) 시작일자 , MIN(종료일자) 종료일자 , MIN(시작발령) 시작발령 , MIN(종료발령) 종료발령 FOR 차 IN ( 1 "1차" , 2 "2차" , 3 "3차" , 4 "4차" ) ) ;