2017-10-30 5 views
0

다음 테이블에서 계층 적 쿼리를 수행하는 데 어려움을 겪고 있습니다.Oracle sql 계층 적 쿼리

CLASSSTRUCTUREID PARENT CLASSIFCATIONID 
1688        FLT 
1689    1688   ASSET 
1690    1688   PMFLT 
1691    1688   CM 
1692    1691   POSTFAILCM 

는 예를 들어 나는 위의 예

FLT/CM/POSTFAILCM as FLT is the parent of CM and CM is the parent of POSTFAILCM 

나는 다음과 같은 쿼리를 사용하지만, 아무튼 위해 아래와 같은 출력을 얻을 싶습니다; t은 나에게 원하는 출력을 제공합니다. 나는 내가 어디에서 잘못했는지 알고 싶었다.

SELECT LPAD(' ', 2*level-1)|| SYS_CONNECT_BY_PATH(CLASSIFICATIONID , '/') "Path" 
,LEVEL 
    FROM CLASSSTRUCTURE 
    START WITH CLASSIFICATIONID = 'PREFAILCM' --TRIED 'FLT' TOO 
    CONNECT BY PRIOR TO_CHAR(CLASSSTRUCTUREUID) = PARENT 

답변

1

희망이 도움이 :

CREATE TABLE CLASSSTRUCTURE AS 
(select 1688 CLASSSTRUCTUREID, NULL PARENT,'FLT' CLASSIFICATIONID FROM DUAL UNION ALL 
select 1689 CLASSSTRUCTUREID, 1688 ,'ASSET' FROM DUAL UNION ALL 
select 1690 CLASSSTRUCTUREID, 1688 ,'PMFLT' FROM DUAL UNION ALL 
select 1691 CLASSSTRUCTUREID, 1688 ,'CM' FROM DUAL UNION ALL 
select 1692 CLASSSTRUCTUREID, 1691 ,'POSTFAILCM' FROM DUAL); 
+0

감사합니다, 그것은 완벽하게 작동합니다 : 테이블을 생성

SELECT LPAD (' ', 2 * LEVEL - 1) || SYS_CONNECT_BY_PATH (CLASSIFICATIONID, '/') PATH, LEVEL FROM CLASSSTRUCTURE START WITH parent IS NULL CONNECT BY PRIOR TO_CHAR (CLASSSTRUCTUREID) = PARENT; 

를 사용! – jax