안녕하세요 마농님
답변으로 해보니 원하는데이타가 잘나오는데요 만약에
유저가 총무팀인데 예산 편성여부가 총무팀은 'N'이고 상위 부서인 총무부도 'Y' 인데 총무부에 상위부서인 경영지원도 예산편성여부가 'Y'이라면 총무부,경영지원부 두건이 조회가 되는데요 이럴때 제가 원가는건 바로위인 총무부 입니다.
결과 값만ㅇ 으로 말하자면 해당부서가 우선 유저 부서가 예산편성여부가 'Y'인경우는 해당유저부서 코드 가 최종 결과값이고
만약 유저부서코드가 예산편성여부가 'N'이라면 그상위부서 가 'Y'이면 그상위 부서만 'N'이라면 그 상위 부서의 상위부서 가 조회 되는 구조입니다....저도 마농님이 알려주신 걸로 생각좀 해봐 야겠네여..ㅜㅜ
잘못 테스트 하신듯 하네요.
저는 잘 나옵니다.
WITH t AS ( SELECT 'A00000' deptno, 'ROOT' p_deptno, 'XXX' dname, 'N' yn FROM dual UNION ALL SELECT 'A00000', 'ROOT' , 'XXX' , 'N' FROM dual UNION ALL SELECT 'A10000', 'A00000', '임원실' , 'N' FROM dual UNION ALL SELECT 'A10100', 'A10000', '임원실' , 'N' FROM dual UNION ALL SELECT 'A20000', 'A10000', '경영지원' , 'Y' FROM dual -- 상상위부서 Y UNION ALL SELECT 'A20001', 'A20000', '경영지원팀', 'N' FROM dual UNION ALL SELECT 'A21000', 'A20000', '총무부' , 'Y' FROM dual -- 상위부서 Y -- 결과부서 UNION ALL SELECT 'A21100', 'A21000', '총무팀' , 'N' FROM dual -- 선택부서 N UNION ALL SELECT 'A21200', 'A21000', '인사팀' , 'N' FROM dual ) SELECT * FROM t WHERE CONNECT_BY_ISLEAF = 1 AND yn = 'Y' START WITH deptno = 'A21100' -- 선택부서 CONNECT BY PRIOR p_deptno = deptno AND PRIOR yn = 'N' ;