계층형 쿼리 , 트리 구조 쿼리 질문입니다 0 5 2,890

by 손님 [SQL Query] 계층 계층형 트리 트리 구조 쿼리 [2013.08.02 10:57:23]



회사 부서 사원
A a 1
A a 2
A a 3
A b 1
A b 2
B c 1
B c 2
B d 1
B d 2
B d 3

이런 형식의 테이블을
트리구조로 뽑고 싶은데 ..

회사 부서 사원
A a 1
 2
 3
  b  1
  2
B c 1
 2
   d 1
 2
3


이런식으로 뽑고 싶은데 ...
by 우리집아찌 [2013.08.02 11:10:20]
WITH T (v1,v2,v3) AS (
SELECT 'A','a','1' FROM DUAL UNION ALL
SELECT 'A','a','2' FROM DUAL UNION ALL
SELECT 'A','a','3' FROM DUAL UNION ALL
SELECT 'A','b','1' FROM DUAL UNION ALL
SELECT 'A','b','2' FROM DUAL UNION ALL
SELECT 'B','c','1' FROM DUAL UNION ALL
SELECT 'B','c','2' FROM DUAL UNION ALL
SELECT 'B','d','1' FROM DUAL UNION ALL
SELECT 'B','d','2' FROM DUAL UNION ALL
SELECT 'B','d','3' FROM DUAL 
)

SELECT 
    CASE WHEN ROW_NUMBER() OVER(PARTITION BY v1 ORDER BY num ) = 1 THEN v1 END v1
   ,CASE WHEN ROW_NUMBER() OVER(PARTITION BY v1,v2 ORDER BY num ) = 1 THEN v2 END v2
   ,v3
FROM (SELECT T.*, rownum num FROM T)

by 손님 [2013.08.02 11:46:32]

감사합니다 !!! ㅎㅎ 쿼리 응용해서 하니 잘되네요 !!


by 마농 [2013.08.02 12:18:46]
-- Rownum 을 이용하는 건 좀 이상하네요. --
SELECT CASE WHEN ROW_NUMBER() OVER(PARTITION BY v1 ORDER BY v2, v3) = 1 THEN v1 END v1
     , CASE WHEN ROW_NUMBER() OVER(PARTITION BY v1, v2 ORDER BY v3) = 1 THEN v2 END v2
     , v3 
  FROM t
;
SELECT NULLIF(v1, LAG(v1) OVER(ORDER BY v1, v2, v3)) v1
     , NULLIF(v2, LAG(v2) OVER(PARTITION BY v1 ORDER BY v2, v3)) v2
     , v3
  FROM t
;

by 우리집아찌 [2013.08.02 12:43:11]
정렬 순서를 몰라서요.. ^^*

잘못봤땅.. ㅎㅎ

by 손님 [2013.08.02 13:28:44]
아 실행후 제대로 보니 정렬부분에서 조금 문제가 있네요 !ㅎㅎ 마농님이 올려주신것이 제대로 정렬됩니다!!! 감사합니다
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입