2017-06-20 18 views
1

私の状況は以下の通りです。私は製品階層を含むテーブルを持っています。sqlを使用して階層内のレベル数を定義する方法は?

child parent 
    1  2 
    2  3 
    4  5 
    6  7 

私は階層の(子供の)深さを含む列を追加したい:次の表は、データセットの抽出物です。次のようなものがあります。

child parent depth 
    1  2  2 
    2  3  1 
    4  5  1 
    6  7  1 

私はそれをOracleでどうしますか?ありがとうございました!以下のような

+1

あなたは、少なくとも11グラムR2を使用していますか?次に、再帰的* Common Table Expression *(CTE)が可能です – Richard

+1

最初の行と2番目の行の深度がそれぞれ3と2の理由は何ですか?彼らは2と1の深さを持っていないはずですか? – MT0

+0

あなたは深さに関して正しいです。私はそれを変えた。ありがとうございます –

答えて

5

何か:

SELECT child, parent, level 
FROM your_table 
START WITH parent NOT IN (SELECT child FROM your_table) 
CONNECT BY parent = PRIOR child; 

出力:

CHILD PARENT LEVEL 
----- ------ ----- 
    1  2  2 
    2  3  1 
    4  5  1 
    6  7  1 
+0

私が探しているものとまったく同じように見えます。ありがとうございました。レベルはあなたの選択のどこから来ますか? –

+1

@PatrickBalada [LEVEL'疑似列](https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns001.htm#i1009261)は、階層問合せによって生成されます。 – MT0

+0

すぐにお返事ありがとうございます! –

関連する問題