계층형 쿼리 질문 드립니다. 0 2 510

by 임마마 [2018.05.22 20:32:31]


레벨1 레벨2 레벨3 데이터1

데이터2

한국 서울 도심1 hg1 abcd
한국 서울 외각2 hg2 efg
한국 서울 외각3 hg3 wef
한국 부산 도심4 hg4 wfq
한국 부산 외각5 hg5 tyjy
미국 LA 도심6 am1 asdw
미국 LA 도심7 am2 egr
미국 LA 도심8 am3 xdf
미국 LA 외각9 am4 rnt
미국 워싱턴 도심10 am5 zsf
미국 워싱턴 외각11 am6 dslod
중국 베이징 도심12 ch1 kego
중국 베이징 외각13 ch2 xloo
중국 베이징 외각14 ch5 ergoe
중국 베이징 외각15 ch7 yjy
중국 홍콩 도심16 ch3 koeg
중국 홍콩 외각17 ch4 zkois

밑에서 한번 질문 드렸던 부분이지만 저의 질문 방식이 잘못되어 다시 한번 질문드립니다.

이런식의 데이터를 아래와 같은 방식으로 바꾸고 싶습니다.

어떻게 해야 효율적으로 바꿀수 있을까요?

답변해주시면 매우 감사드립니다..

lev tree 레벨1 레벨2 레벨3 데이터1 데이터2
1 한국          
2 서울          
3 도심1 한국 서울 도심1 hg1 abcd
3 외각2 한국 서울 외각2 hg2 efg
3 외각3 한국 서울 외각3 hg3 wef
2 부산          
3 도심4 한국 부산 도심4 hg4 wfq
3 외각5 한국 부산 외각5 hg5 tyjy
1 미국          
2 LA          
3 도심6 미국 LA 도심6 am1 asdw
3 도심7 미국 LA 도심7 am2 egr
3 도심8 미국 LA 도심8 am3 xdf
3 외각9 미국 LA 외각9 am4 rnt
2 워싱턴          
3 도심10 미국 워싱턴 도심10 am5 zsf
3 외각11 미국 워싱턴 외각11 am6 dslod
1 중국          
2 베이징          
3 도심12 중국 베이징 도심12 ch1 kego
3 도심13 중국 베이징 도심13 ch2 xloo
3 도심14 중국 베이징 도심14 ch5 ergoe
3 외각15 중국 베이징 외각15 ch7 yjy
2 홍콩          
3 도심16 중국 홍콩 도심16 ch3 koeg
3 외각17 중국 홍콩 외각17 ch4

zkois

 

이전에 답변주신분의 코드로 해보았으나 공부가 미흡하여 제대로 하지 못하고 있습니다..

 

WITH t AS
(
SELECT '한국' lv1, '서울' lv2, '도심' lv3, 120 v1, 10 v2 FROM dual
UNION ALL SELECT '한국', '서울'  , '외각1', 110,  20 FROM dual
UNION ALL SELECT '한국', '부산'  , '도심2', 100,  30 FROM dual
UNION ALL SELECT '한국', '부산'  , '외각3',  90,  40 FROM dual
UNION ALL SELECT '한국', '부산'  , '마무밧나',  90,  40 FROM dual
UNION ALL SELECT '미국', 'LA'    , '도심4',  80,  50 FROM dual
UNION ALL SELECT '미국', 'LA'    , '외각5',  70,  60 FROM dual
UNION ALL SELECT '미국', '워싱턴', '도심6',  60,  70 FROM dual
UNION ALL SELECT '미국', '워싱턴', '외각7',  50,  80 FROM dual
UNION ALL SELECT '중국', '베이징', '도심8',  40,  90 FROM dual
UNION ALL SELECT '중국', '베이징', '외각9',  30, 100 FROM dual
UNION ALL SELECT '중국', '홍콩'  , '도0심',  20, 110 FROM dual
UNION ALL SELECT '중국', '홍콩'  , '외11각',  10, 120 FROM dual
)
SELECT DECODE(GROUPING_ID(lv2, lv3), 3, 0, 1, 1, 0, 2) lv
    , COALESCE(lv3, lv2, lv1) lv4
     , DECODE(GROUPING(v2), 0, lv1) lv1
     , DECODE(GROUPING(v2), 0, lv2) lv2
     , DECODE(GROUPING(v2), 0, lv3) lv3
     , DECODE(GROUPING(v2), 0, v1) v1
     , DECODE(GROUPING(v2), 0, v2) v2

  FROM t a
 GROUP BY lv1, ROLLUP(lv2, lv3,v1,v2)
  ORDER BY MIN(ROWNUM)
       , a.lv1
     , a.lv2 NULLS FIRST
     , a.lv3 NULLS FIRST
     , a.v1 NULLS FIRST
     , a.v2 NULLS FIRST
;

  

by 마농 [2018.05.23 09:24:27]
SELECT DECODE(GROUPING_ID(lv2, lv3), 3, 1, 1, 2, 0, 3) lv
     , COALESCE(lv3, lv2, lv1) lv4
     , DECODE(GROUPING(lv3), 0, lv1) lv1
     , DECODE(GROUPING(lv3), 0, lv2) lv2
     , lv3
     , v1
     , v2
  FROM t a
 GROUP BY lv1, ROLLUP(lv2, (lv3, v1, v2))
 ORDER BY MIN(ROWNUM)
     , a.lv1
     , a.lv2 NULLS FIRST
     , a.lv3 NULLS FIRST
;

 


by 임마마 [2018.05.23 19:30:18]

정말 감사합니다..

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