[오라클] CONNECT BY 이용한 상위 부서 뽑기
2017. 5. 19. 15:29ㆍIT/Oracle
SELECT S2.USER_EMP_NO AS ADTOR_IDFROM (SELECT DISTINCT AUDITOR_ID, REGEXP_SUBSTR(A.DEPT_ID, '[^,]+', 1, LEVEL) AS DETAIL_DEPT_IDFROM AUDIT_KIND_AMOUNT AWHERE REGEXP_SUBSTR(A.DEPT_ID, '[^,]+', 1, LEVEL) IS NOT NULLCONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(A.DEPT_ID, '[^,]+',''))+1 ) S1LEFT OUTER JOIN TB_DW_PT_USER S2ON S1.AUDITOR_ID = S2.USER_IDWHERE S3.DETAIL_DEPT_ID = ( SELECT T.DEPT_IDFROM (SELECT A.DEPT_ID, A.DEPT_LEVEL, A.UPPER_DEPT_IDFROM TB_CO_DEPT_HIST AWHERE A.HIST_ENDDE = '99991231'AND A.DEPT_LEVEL > 2) TWHERE T.DEPT_LEVEL = 3CONNECT BY T.DEPT_ID = PRIOR T.UPPER_DEPT_IDSTART WITH T.DEPT_ID = (SELECT DEPT_IDFROM TB_CO_USER_HISTWHERE 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 |