아래 왼쪽과 같이 데이터가 들어있는데 오른쪽과 같이 계층형으로 만들어 보려고 합니다.
테이블 구조가 부모와 자식 컬럼 구분이 없이 이렇게 한 컬럼에 들어가 있을때 계층형을 어떻게 만들어야 하는지
너무 어렵네요 ...ㅠ.ㅠ 고수님들의 한 수 가르침 부탁드립니다.
코드 | 코드명 | 출력순서 | 코드 | 코드명 | 출력순서 | |
서울 | 1 | 서울 | 1 | |||
aa01 | 강서구 | 2 | aa01 | 강서구 | 2 | |
aa0101 | 염창동 | 3 | aa0101 | 염창동 | 3 | |
aa0102 | 등창동 | 4 | aa0102 | 등창동 | 4 | |
aa0103 | 화곡동 | 5 | aa0103 | 화곡동 | 5 | |
aa01a | 강동구 | 6 | aa01a | 강동구 | 6 | |
aa01a01 | 고덕동 | 7 | aa01a01 | 고덕동 | 7 | |
aa01a02 | 상일동 | 8 | aa01a02 | 상일동 | 8 | |
대전 | 9 | 대전 | 9 | |||
aa01b | 유성구 | 10 | -------> | aa01b | 유성구 | 10 |
aa01b01 | 신성동 | 11 | aa01b01 | 신성동 | 11 | |
aa01b02 | 관평동 | 12 | aa01b02 | 관평동 | 12 | |
aa01c | 대덕구 | 13 | aa01c | 대덕구 | 13 | |
aa01c01 | 중리동 | 14 | aa01c01 | 중리동 | 14 | |
aa01c02 | 덕암동 | 15 | aa01c02 | 덕암동 | 15 | |
aa01c03 | 법동 | 16 | aa01c03 | 법동 | 16 | |
충남 | 17 | 충남 | 17 | |||
aa01d | 천안시 | 18 | aa01d | 천안시 | 18 | |
aa01d01 | 동남구 | 19 | aa01d01 | 동남구 | 19 | |
aa01d0101 | 대흥동 | 20 | aa01d0101 | 대흥동 | 20 | |
aa01d0102 | 문화동 | 21 | aa01d0102 | 문화동 | 21 |
WITH t AS ( SELECT '' cd, '서울' nm, 1 seq FROM dual UNION ALL SELECT 'aa01' , '강서구', 2 FROM dual UNION ALL SELECT 'aa0101' , '염창동', 3 FROM dual UNION ALL SELECT 'aa0102' , '등창동', 4 FROM dual UNION ALL SELECT 'aa0103' , '화곡동', 5 FROM dual UNION ALL SELECT 'aa01a' , '강동구', 6 FROM dual UNION ALL SELECT 'aa01a01' , '고덕동', 7 FROM dual UNION ALL SELECT 'aa01a02' , '상일동', 8 FROM dual UNION ALL SELECT '' , '대전' , 9 FROM dual UNION ALL SELECT 'aa01b' , '유성구', 10 FROM dual UNION ALL SELECT 'aa01b01' , '신성동', 11 FROM dual UNION ALL SELECT 'aa01b02' , '관평동', 12 FROM dual UNION ALL SELECT 'aa01c' , '대덕구', 13 FROM dual UNION ALL SELECT 'aa01c01' , '중리동', 14 FROM dual UNION ALL SELECT 'aa01c02' , '덕암동', 15 FROM dual UNION ALL SELECT 'aa01c03' , '법동' , 16 FROM dual UNION ALL SELECT '' , '충남' , 17 FROM dual UNION ALL SELECT 'aa01d' , '천안시', 18 FROM dual UNION ALL SELECT 'aa01d01' , '동남구', 19 FROM dual UNION ALL SELECT 'aa01d0101', '대흥동', 20 FROM dual UNION ALL SELECT 'aa01d0102', '문화동', 21 FROM dual ) SELECT cd , LPAD(' ', lv*2-2, ' ') || nm AS nm , seq , lv FROM (SELECT cd, nm, seq , DECODE(LENGTH(cd), null, 1 , 4, 2, 5, 2 , 6, 3, 7, 3 , 8, 4, 9, 4 ) lv FROM t ) ORDER BY seq ;