database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41454 게시물 읽기
No. 41454
level(?), rank(?) 트리구조 쿼리좀 부탁드립니다.
작성자
airmanx
작성일
2017-08-31 10:37
조회수
6,208

안녕하세요. 쿼리를 작성하다 아무리 해도 되지않는 쿼리가 있어서 고수님들의 조언을 구해봅니다. 부탁드리겠습니다.

 

기초 테이블 데이터는 다음과 같이 많은 데이터가 있습니다.

p_cd cd nm

1000 1000000 수입

1100 1100000 사업수입

1101 1101000 회비수입

1101 1101001 회비수입

1101 1101105 특별회비

1103 1103000 임대사업수입

1103 1103001 사무실임대료수입

1103 1103002 영업장임대료수입

1104 1104000 사용료수입

1104 1104001 주차장사용료수입

1104 1104002 회의실사용료수입

1104 1104003 기타사용료수입

2000 2000000 비용

2100 2100000 사업비용

2101 2101000 일반사업비

2101 2101001 상공진흥비

2101 2101002 경제조사비

2101 2101003 유통조사비

2101 2101004 국제협력비

2101 2101005 홍보비

2103 2103000 수익사업사업비

2103 2103001 매출원가

2103 2103002 재산관리비

5000 5000000 자산

5100 5100000 유동자산

5101 5101000 당좌자산

5101 5101001 현금

5101 5101002 당좌예금

5101 5101003 보통예금

 

위의 기초 데이터를 기준으로 다른테이블과 조인하여 데이터를 가지고 와야하는데 기초데이터를 트리구조로 가지고 와야 하는데 잘 안되네요

 

아래와 같이 나와야 합니다.

p_cd cd lv nm

1000 1000000 0 수입

1100 1100000 1 ├사업수입

1101 1101000 2 ├─회비수입

1101 1101001 3 ├──회비수입

1101 1101105 3 ├──특별회비

1103 1103000 2 ├─임대사업수입

1103 1103001 3 ├──사무실임대료수입

1103 1103002 3 ├──영업장임대료수입

1104 1104000 2 ├─사용료수입

1104 1104001 3 ├──주차장사용료수입

1104 1104002 3 ├──회의실사용료수입

1104 1104003 3 └──기타사용료수입

2000 2000000 0 비용

2100 2100000 1 ├사업비용

2101 2101000 2 ├─일반사업비

2101 2101001 3 ├──상공진흥비

2101 2101002 3 ├──경제조사비

2101 2101003 3 ├──유통조사비

2101 2101004 3 ├──국제협력비

2101 2101005 3 ├──홍보비

2103 2103000 2 ├─수익사업사업비

2103 2103001 3 ├──매출원가

2103 2103002 3 └──재산관리비

5000 5000000 0 자산

5100 5100000 1 ├유동자산

5101 5101000 2 ├─당좌자산

5101 5101001 3 ├──현금

5101 5101002 3 ├──당좌예금

5101 5101003 3 └──보통예금

 

WITH T(P_CD, CD, NM) AS (

SELECT '1000', '1000000', '수입' FROM DUAL UNION ALL

SELECT '1100', '1100000', '사업수입' FROM DUAL UNION ALL

SELECT '1101', '1101000', '회비수입' FROM DUAL UNION ALL

SELECT '1101', '1101001', '회비수입' FROM DUAL UNION ALL

SELECT '1101', '1101105', '특별회비' FROM DUAL UNION ALL

SELECT '1103', '1103000', '임대사업수입' FROM DUAL UNION ALL

SELECT '1103', '1103001', '사무실임대료수입' FROM DUAL UNION ALL

SELECT '1103', '1103002', '영업장임대료수입' FROM DUAL UNION ALL

SELECT '1104', '1104000', '사용료수입' FROM DUAL UNION ALL

SELECT '1104', '1104001', '주차장사용료수입' FROM DUAL UNION ALL

SELECT '1104', '1104002', '회의실사용료수입' FROM DUAL UNION ALL

SELECT '1104', '1104003', '기타사용료수입' FROM DUAL UNION ALL

SELECT '2000', '2000000', '비용' FROM DUAL UNION ALL

SELECT '2100', '2100000', '사업비용' FROM DUAL UNION ALL

SELECT '2101', '2101000', '일반사업비' FROM DUAL UNION ALL

SELECT '2101', '2101001', '상공진흥비' FROM DUAL UNION ALL

SELECT '2101', '2101002', '경제조사비' FROM DUAL UNION ALL

SELECT '2101', '2101003', '유통조사비' FROM DUAL UNION ALL

SELECT '2101', '2101004', '국제협력비' FROM DUAL UNION ALL

SELECT '2101', '2101005', '홍보비' FROM DUAL UNION ALL

SELECT '2103', '2103000', '수익사업사업비' FROM DUAL UNION ALL

SELECT '2103', '2103001', '매출원가' FROM DUAL UNION ALL

SELECT '2103', '2103002', '재산관리비' FROM DUAL UNION ALL

SELECT '5000', '5000000', '자산' FROM DUAL UNION ALL

SELECT '5100', '5100000', '유동자산' FROM DUAL UNION ALL

SELECT '5101', '5101000', '당좌자산' FROM DUAL UNION ALL

SELECT '5101', '5101001', '현금' FROM DUAL UNION ALL

SELECT '5101', '5101002', '당좌예금' FROM DUAL UNION ALL

SELECT '5101', '5101003', '보통예금' FROM DUAL

)

SELECT *

FROM T

 

부탁드리겠습니다.

 

 

이 글에 대한 댓글이 총 2건 있습니다.

SELECT p_cd
     , cd
     , lv
     , SUBSTR('├──', 1, lv) || nm AS nm
  FROM (SELECT p_cd, cd, nm
             , CASE WHEN cd LIKE '_000%' THEN 0
                    WHEN cd LIKE '__00%' THEN 1
                    WHEN cd LIKE '%000'  THEN 2
                    ELSE 3 END lv
          FROM t
        )
 ORDER BY cd
;

마농(manon94)님이 2017-08-31 18:13에 작성한 댓글입니다.

으헐~~~~ 마농님 항상 감사드립니다.

쿼리는 아무리 공부해도 모자람을 느끼게하네요..

열심히 공부해야겠습니다.

airmanx님이 2017-09-01 09:48에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41458오라클 group by 후 count 사용 시 문제입니다. [2]
오라클
2017-09-06
6481
41456특수문자($) 포함 자리수 제거 가능 할까요? [3]
꿈읽는이
2017-09-04
6037
41455Oracle Client 64Bit Pro*C랑 개발도구 2008 C++ 64Bit 플랫폼 구현
김민재
2017-08-31
5748
41454level(?), rank(?) 트리구조 쿼리좀 부탁드립니다. [2]
airmanx
2017-08-31
6208
41453다른유형의 레코드형태를 어떻게 빨리 조회할 수 있을까요?
권순환
2017-08-23
5963
41452rman-00600
jjd
2017-08-22
5660
41451한개컬럼에 나오게 하고 싶을때 [2]
꼭결과를
2017-08-18
14506
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다