특정 부서를 표시하고 싶은데요.. 0 2 587

by 푸릉이 [2018.07.27 14:48:53]


WITH RELATION(BSCODE, UPBSCODE, BSNAME, ISBONBU) AS 
(
SELECT 'aaaaa'  ,'aaaa'   ,'안전팀' , 'N' FROM DUAL UNION ALL
SELECT 'aaaa'    ,'aaa'   ,'안전팀처' , 'N' FROM DUAL UNION ALL
SELECT 'aaa'      ,'aa'   , '시설부' , 'N' FROM DUAL UNION ALL
SELECT 'aa'        ,'a'   , 'A본부' , 'Y' FROM DUAL UNION ALL
SELECT 'a'        ,'k_a'   , 'A본사' , 'N' FROM DUAL UNION ALL
SELECT 'bbbbb'  ,'bbbb'   ,'위험팀' , 'N' FROM DUAL UNION ALL
SELECT 'bbbb'    ,'bbb'   ,'위험팀처' , 'N' FROM DUAL UNION ALL
SELECT 'bbb'      ,'bb'   , '위험부' , 'N' FROM DUAL UNION ALL
SELECT 'bb'        ,'b'   , 'B본부' , 'Y' FROM DUAL UNION ALL
SELECT 'b'        ,'k_b'   , 'B본사' , 'N' FROM DUAL
)
),  INSA (NAME, BSCODE, AMT) AS
(
    SELECT 'Kevin', 'aaa', '1000' FROM DUAL UNION ALL 
    SELECT 'Michael', 'bbbbb', '2000' FROM DUAL UNION ALL
    SELECT 'Uncle', 'aaaaa', '4000' FROM DUAL
)
이런데이터가 있는데요
부서코드가 어떤게 오더라고 본부를 바로 옆에 표시하고 싶습니다. 본부임을 나타내는 ISBONBU란 플래그도 있습니다.

아래처럼 나오게 하고 싶습니다.
이름       본부  본부코드     부서      부서코드    금액
KEVIN     A본부   A         시설부       AAA     1000
MICHAEL   B본부   B         위험팀처     BBBB     2000
UNCLE     A본부   A         안전팀       AAAAA    40000   

by 우리집아찌 [2018.07.27 15:05:07]
-- 샘플데이터와 원하는값이랑 상이해서 수정했습니다.
WITH RELATION(BSCODE, UPBSCODE, BSNAME, ISBONBU) AS 
(
SELECT 'aaaaa'  ,'aaaa'   ,'안전팀' , 'N' FROM DUAL UNION ALL
SELECT 'aaaa'    ,'aaa'   ,'안전팀처' , 'N' FROM DUAL UNION ALL
SELECT 'aaa'      ,'aa'   , '시설부' , 'N' FROM DUAL UNION ALL
SELECT 'aa'        ,'a'   , 'A본부' , 'Y' FROM DUAL UNION ALL
SELECT 'a'        ,'k_a'   , 'A본사' , 'N' FROM DUAL UNION ALL
SELECT 'bbbb'    ,'bbb'   ,'위험팀' , 'N' FROM DUAL UNION ALL
SELECT 'bbb'      ,'bb'   , '위험팀처' , 'N' FROM DUAL UNION ALL
SELECT 'bb'        ,'b'   , 'B본부' , 'Y' FROM DUAL UNION ALL
SELECT 'b'        ,'k_b'   , 'B본사' , 'N' FROM DUAL 
), INSA (NAME, BSCODE, AMT) AS (
    SELECT 'Kevin', 'aaa', '1000' FROM DUAL UNION ALL 
    SELECT 'Michael', 'bbb', '2000' FROM DUAL UNION ALL
    SELECT 'Uncle', 'aaaaa', '4000' FROM DUAL
)


SELECT B.NAME 
     , A.PATH_NAME
     , REGEXP_SUBSTR( A.PATH_NAME , '[^/]+' , 1 ,2 ) AS "본부"
     , REGEXP_SUBSTR( A.PATH_CODE , '[^/]+' , 1 ,2 ) AS "본부코드"
     , A.BSNAME
     , A.BSCODE
     , B.AMT
  FROM ( SELECT LEVEL LV 
              , SYS_CONNECT_BY_PATH ( AA.BSNAME , '/' ) PATH_NAME
              , SYS_CONNECT_BY_PATH ( AA.BSCODE , '/' ) PATH_CODE
              , AA.BSNAME 
              , AA.BSCODE
           FROM RELATION AA
          START WITH AA.UPBSCODE IN ( 'k_a' , 'k_b') 
        CONNECT BY PRIOR AA.BSCODE = AA.UPBSCODE
       ) A
     , INSA B
 WHERE A.BSCODE = B.BSCODE
 ORDER BY B.NAME

 


by 푸릉이 [2018.08.06 17:34:10]

고맙습니다. 오래전부터 고민한던게 해결됐습니다.

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