죄송하지만 계층쿼리 질문 다시 올립니다. 0 1 2,353

by 보냐스키 [SQL Query] 계층 트리 START WITH [2015.10.26 13:35:24]


 

아래는 예시 데이터입니다.

TABLE 1

PJT_SQ, DEPT, UNIT, CONTENT

1001       부서1    유닛1  내용1

1001       부서2    유닛2  내용2

1002       부서1    유닛3  내용3

1002       부서2    유닛4  내용3

 

TABLE 2

PJT_SQ, PJT_NM

1001        프로젝트1

1002        프로젝트2

 

식으로 2개 테이블을 조인하려고 합니다.

 

출력형태는

1번 컬럼 2번 컬럼
프로젝트1  
     DEPT1  
        UNIT1  
  CONTENT
  CONTENT
        UNIT2  
  CONTENT
  CONTENT
프로젝트2  
     DEPT1  
         UNIT2  
  CONTENT
     DEPT2  
         UNIT1  
  CONTENT

 

 

 

화면단에서는 프로젝트를 열면 프로젝트에 속한 DEPT가 나오고

거기서 DEPT를 또 열면 UNIT이 나오고 유닛을 열면 나머지 유닛에 속한 내용이 나오는 식입니다.

 

이게 3개가 펼쳐지는 구조라 너무 햇갈립니다..

그리고  부모 자식관계가 마땅히 없는데 어떤식으로 해야할지요..

소중한 지식공유 부탁드립니다.

by 마농 [2015.10.27 09:10:21]
WITH t1 AS
(
SELECT 1001 pjt_sq, '부서1' dept, '유닛1' unit, '내용1' content FROM dual
UNION ALL SELECT 1001, '부서2', '유닛2', '내용2' FROM dual
UNION ALL SELECT 1002, '부서1', '유닛3', '내용3' FROM dual
UNION ALL SELECT 1002, '부서2', '유닛4', '내용3' FROM dual
)
, t2 AS
(
SELECT 1001 pjt_sq, '프로젝트1' pjt_nm FROM dual
UNION ALL SELECT 1002, '프로젝트2' FROM dual
)
SELECT DECODE(GROUPING_ID(a.dept, a.unit, a.content)
       , 7, b.pjt_nm
       , 3, '  ' || a.dept
       , 1, '    ' || a.unit
       ) c1
     , a.content c2
  FROM t1 a
     , t2 b
 WHERE a.pjt_sq = b.pjt_sq
 GROUP BY a.pjt_sq, b.pjt_nm, ROLLUP(a.dept, a.unit, a.content)
 ORDER BY a.pjt_sq
     , a.dept    NULLS FIRST
     , a.unit    NULLS FIRST
     , a.content NULLS FIRST
;

 

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