레벨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
;