MIJ_EMPLOYE 라는 테이블이 있습니다. 인사 기본 테이블이며, KEY는 EMP_NO 입니다.
궁금한것은 ... 인사 기본 테이블의 모든 데이터를 조회 하되 이전 사원번호를 포함하여 조회 하는 것입니다.
직원은 신규 발령이나 정직원 채용등으로인해 사원번호가 변경 될 수 있습니다.
1.변경 될 경우에는 입사일자가 사번 변경일자로 저장됩니다.
2.사번 변경 시 기존 사번은 퇴직 처리, 신규 사번은 재직
3.아래와 같이 주민등록 번호 하나에 대해 여러 사번이 생성 될 수 있습니다.
예를 들어
EMP_NO PRE_EMP_NO ENT_YMD 재/퇴 주민번호 ......................
861685 NULL 19861101 퇴직 910312-1XXXXXX
441180 861685 19991211 퇴직 910312-1XXXXXX
442358 441180 20070312 퇴직 910312-1XXXXXX
442231 442358 20080311 퇴직 910312-1XXXXXX
442090 442231 20090305 퇴직 910312-1XXXXXX
442500 442090 20100114 퇴직 910312-1XXXXXX
442710 442500 20110301 재직 910312-1XXXXXX
123456 NULL 20160804 재직 910412-1XXXXXX <-- 사번 변경이 없었던 사원
.
.
.
.
.
.
.
11097 ROW
부탁드립니다..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | WITH T (EMP_NO, ENT_YMD, 재퇴, 주민번호) AS ( SELECT '861685' , '19861101' , '퇴직' , '910312-1XXXXXX' FROM DUAL UNION ALL SELECT '441180' , '19991211' , '퇴직' , '910312-1XXXXXX' FROM DUAL UNION ALL SELECT '442358' , '20070312' , '퇴직' , '910312-1XXXXXX' FROM DUAL UNION ALL SELECT '442231' , '20080311' , '퇴직' , '910312-1XXXXXX' FROM DUAL UNION ALL SELECT '442090' , '20090305' , '퇴직' , '910312-1XXXXXX' FROM DUAL UNION ALL SELECT '442500' , '20100114' , '퇴직' , '910312-1XXXXXX' FROM DUAL UNION ALL SELECT '442710' , '20110301' , '재직' , '910312-1XXXXXX' FROM DUAL ) SELECT EMP_NO ,LAG(EMP_NO) OVER( ORDER BY 1) AS PRE_EMP_NO ,ENT_YMD ,재퇴 ,주민번호 FROM T |
단순히 이전사번을 같이 조회 하면되는것인지요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | WITH T (EMP_NO, ENT_YMD, 재퇴, 주민번호) AS ( SELECT '861685' , '19861101' , '퇴직' , '900112-1XXXXXX' FROM DUAL UNION ALL SELECT '441180' , '19991211' , '퇴직' , '910502-1XXXXXX' FROM DUAL UNION ALL SELECT '442358' , '20070312' , '퇴직' , '920111-1XXXXXX' FROM DUAL UNION ALL SELECT '442231' , '20080311' , '퇴직' , '930312-1XXXXXX' FROM DUAL UNION ALL SELECT '442090' , '20090305' , '퇴직' , '940312-1XXXXXX' FROM DUAL UNION ALL SELECT '442500' , '20100114' , '퇴직' , '910502-1XXXXXX' FROM DUAL UNION ALL SELECT '412710' , '20110301' , '재직' , '950516-1XXXXXX' FROM DUAL UNION ALL SELECT '462500' , '20100114' , '퇴직' , '900112-1XXXXXX' FROM DUAL ) SELECT EMP_NO , CASE WHEN RN > 1 THEN LAG(EMP_NO) OVER( ORDER BY 1) ELSE NULL END AS PRE_EMP_NO ,ENT_YMD ,재퇴 ,주민번호 FROM ( SELECT EMP_NO ,ENT_YMD ,재퇴 ,주민번호 ,ROW_NUMBER() OVER(PARTITION BY 주민번호 ORDER BY EMP_NO) AS RN FROM T A ) |
이게 맞나요?