2017-10-30 7 views
0

次の表で階層問合せを実行するのに苦労しています。Oracle sql-hierarchical query

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 

私は次のクエリを使用しますがdoesnのために以下のような出力を取得したいと思い; 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

・ホープ、このことができます:使用

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; 

は、テーブルを作成します。

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

おかげで、それは完璧に動作します! – jax