초보가 쿼리 질문 좀 드립니다....ㅠ.ㅠ 0 2 1,295

by 빳데리빵빵 [2016.06.24 22:33:48]


아래 왼쪽과 같이 데이터가 들어있는데 오른쪽과 같이 계층형으로 만들어 보려고 합니다.

테이블 구조가 부모와 자식 컬럼 구분이 없이 이렇게 한 컬럼에 들어가 있을때 계층형을 어떻게 만들어야 하는지

너무 어렵네요 ...ㅠ.ㅠ 고수님들의 한 수 가르침 부탁드립니다.

코드 코드명 출력순서   코드 코드명 출력순서
  서울 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
by 마농 [2016.06.27 10:08:35]
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
;


 


by 손님 [2016.06.27 12:23:53]
우앙... 마농님 정말 감사합니다 덕분에 고민하던 문제가 해결되었네요 ^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입