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
부탁드립니다..
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
단순히 이전사번을 같이 조회 하면되는것인지요?
주민 번호를 기준으로 변경된 사번의 이전 사번을 포함하여 가져오려고 하고 있습니다.
설명을 조리있게 하지 못하겠는데.. 주민번호를 기준으로 주민번호는 같은데 변경된 사번이 존재한다라고 가정하면 현재사번 이전사번 이며 변경된 사번이 존재 하지 않는다 현재사번 NULL인 형태입니다..
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
)
이게 맞나요?
SELECT EMP_NO
, CASE WHEN RN > 1 THEN LAG(EMP_NO) OVER(ORDER BY 1) ELSE NULL END AS PRE_EMP_NO
, PRSN_ID
FROM (SELECT EMP_NO
, ROW_NUMBER() OVER(PARTITION BY PRSN_ID ORDER BY EMP_NO) AS RN
, PRSN_ID
FROM MIJ_EMPLOYE) A
ORDER BY EMP_NO DESC
요런식으로 작성해서 돌려본결과 데이터가 쫌 이상했습니다.. 제설명부족인거 같습니다
음 구체적으로 말씀드리자면
변경 사번 변경 직전 사번 주민등록번호
990199 990202 380703-16XXXXX 이런 데이터가 나왔는데
이 직원 주민 등록번호로 조회 했을시 조회결과가
사번
680103
990199 로 조회가 되었습니다. 즉 결과 데이터는 990199 680103 이 나왔어야 맞는 데이터였습니다.
, LAG(emp_no) OVER(PARTITION BY jumin_no ORDER BY ent_ymd) AS pre_emp_no
감사합니다 원하는 데이터가 나왔습니다!