계층쿼리좀 질문드리겠습니다 ^^; 0 2 2,151

by 손님 SYS_CONNECT_BY_PATH CONNECT BY [2012.04.03 12:18:58]


우선 테스트 테이블
CREATE TABLE testNo(no INT , name VARCHAR2(100) , parentNo VARCHAR2(100));

INSERT INTO testNo(no,name,parentNo )VALUES(1,'a',0);
INSERT INTO testNo(no,name,parentNo)VALUES(2,'b',1);
INSERT INTO testNo(no,name,parentNo)VALUES(3,'c',2);
INSERT INTO testNo(no,name,parentNo)VALUES(4,'d',1);
INSERT INTO testNo(no,name,parentNo)VALUES(5,'e',4);
INSERT INTO testNo(no,name,parentNo)VALUES(6,'f',5);


계층 쿼리구요
select lpad(' ',(level-1)*3,' ')||name , no, parentNo,'.1' AS newCode
from
(
select a.* from testNo a
)
start with parentNo='0' connect by prior no=parentNo

NewCode 에 계층대로 예를 들어

a 이면 .0
b 이면 .1
c 이면 .1.2
d 이면 .1
e 이면 .1.4
f 이면 .1.5.4

이런식으로 쿼리를 해야하는데 어떻게 해야 할까요?

by 손님 [2012.04.03 13:11:56]
with testNo(no, name, parentNo) as
(
    select 1, 'a', 0 from dual union all
     select 2, 'b', 1 from dual union all
     select 3, 'c', 2 from dual union all
     select 4, 'd', 1 from dual union all
     select 5, 'e', 4 from dual union all
     select 6, 'f', 5 from dual
)

select

   lpad(' ',(level-1)*3,' ')||name , no, parentNo,
   decode(level, 1, '.0', substr(SYS_CONNECT_BY_PATH(parentNo,'.'), 3)) as newcode
from
    testNo
start with parentNo = 0
connect by prior no = parentNo;

-------------------------------------------------------------
f 이면.. 1.5.4가 아니라 1.4.5가 나와야 하는거 아닌가요?


by 손님 [2012.04.03 13:36:58]

아..그렇네요...
아무튼 감사합니다 ^^;
오라클 오랜만에써서 SYS_CONNECT_BY_PATH 를 까먹고있었내요 ㅜㅜ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입