[오라클] CONNECT BY 이용한 상위 부서 뽑기

2017. 5. 19. 15:29IT/Oracle

SELECT S2.USER_EMP_NO AS ADTOR_ID
FROM (
SELECT DISTINCT AUDITOR_ID, REGEXP_SUBSTR(A.DEPT_ID, '[^,]+', 1, LEVEL) AS DETAIL_DEPT_ID
FROM AUDIT_KIND_AMOUNT A
WHERE REGEXP_SUBSTR(A.DEPT_ID, '[^,]+', 1, LEVEL) IS NOT NULL
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(A.DEPT_ID, '[^,]+',''))+1 ) S1
LEFT OUTER JOIN TB_DW_PT_USER S2
ON S1.AUDITOR_ID = S2.USER_ID
WHERE S3.DETAIL_DEPT_ID = ( SELECT T.DEPT_ID
FROM (
SELECT A.DEPT_ID, A.DEPT_LEVEL, A.UPPER_DEPT_ID
FROM TB_CO_DEPT_HIST A
WHERE A.HIST_ENDDE = '99991231'
AND A.DEPT_LEVEL > 2
) T
WHERE T.DEPT_LEVEL = 3
CONNECT BY T.DEPT_ID = PRIOR T.UPPER_DEPT_ID
START WITH T.DEPT_ID = (SELECT DEPT_ID
FROM TB_CO_USER_HIST
WHERE USER_ID = #{userId} -- 사번
AND HIST_BGNDE = #{userBgnde}) ) -- 기준일

>> 설명은 1. 사원 이력 테이블에서 특정 시점의 사원 부서ID 조회 2. 부서레벨 > 2 (1,2는 사장 3은 본부)인 모든 부서 정보에서 상위 부서 정보를 뽑아온다 3. 뽑아온 상위 부서ID와 사원 부서ID를 비교하여 본부ID를 추출 나머지는 해당 본부의 메신저 담당자를 뽑아는 내용. 끝.


'IT > Oracle' 카테고리의 다른 글

[오라클] 반기 구하는 쿼리  (0) 2017.04.28
오라클 11g -> 10g로 이관할 때.  (0) 2013.06.03
오라클 ORA-06552, ORA-06553 오류가 발생했다.  (0) 2013.03.05