계층구조 내역중 특정조건에 따른 값 가지고 올떄 SQL문의 드립니다. 0 4 1,501

by lgxj20 계층구조 [2015.12.14 11:54:11]


저장.PNG (65,699Bytes)

아래처럼 상위 코드 가지고오는 SYS_CONNECT_BY_PATH를 사해서 SYS_CONNECT_BY_PATH(부서 || 예산편성여부,'/') AS PATHS 해서 하면 될꺼 같기도 한데...어떤식으로 해야 될까요???

by 마농 [2015.12.14 13:41:18]
SELECT *
  FROM t
 WHERE CONNECT_BY_ISLEAF = 1
   AND yn = 'Y'
 START WITH deptno = 'A21200'
 CONNECT BY PRIOR p_deptno = deptno
        AND PRIOR yn = 'N'
;

 


by lgxj20 [2015.12.14 14:02:43]

안녕하세요 마농님

답변으로 해보니 원하는데이타가 잘나오는데요 만약에

유저가 총무팀인데 예산 편성여부가 총무팀은 'N'이고 상위 부서인 총무부도 'Y' 인데 총무부에 상위부서인 경영지원도 예산편성여부가 'Y'이라면 총무부,경영지원부 두건이 조회가 되는데요 이럴때 제가 원가는건 바로위인 총무부 입니다.

 

결과 값만ㅇ 으로 말하자면 해당부서가 우선 유저 부서가 예산편성여부가 'Y'인경우는 해당유저부서 코드 가 최종 결과값이고

만약 유저부서코드가 예산편성여부가 'N'이라면 그상위부서 가 'Y'이면 그상위 부서만 'N'이라면 그 상위 부서의 상위부서 가 조회 되는 구조입니다....저도 마농님이 알려주신 걸로 생각좀 해봐 야겠네여..ㅜㅜ


by 마농 [2015.12.14 14:26:14]

잘못 테스트 하신듯 하네요.

저는 잘 나옵니다.

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'
;

 


by lgxj20 [2015.12.14 14:55:21]

아 잘되네요...제가 뭘테스트한건지...

오늘 업무때문에 멘붕이와서 이상하게 테스트를 했네요...

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입