2015-04-22 27 views
1

我的SQL語句有問題。我想將每個對象的頂級父項添加到每一行。我嘗試了一些東西,但我不得不說,我幾乎是一個SQL初學者。將頂層父項添加到現有SQL查詢

例如:

Object A: ID 2, ParentID NULL 
Object B: ID 10, ParentID 2 
Object C: ID 25, ParentID 10 
Object D: ID 51, ParentID 25 

現在的結果應該是:

Object D: ID 51, ParentID 25, TopParent 2 

這是到目前爲止我的查詢:

With 
    Geraetetypen(TypID, Typname, ParentID, Ebene) As (Select parentTyp.ID, 
     parentTyp.geraeteTyp, 
     IsNull(parentTyp.parentID, 0) parentID, 
    1 As Ebene 
From test_table_GeraeteTyp As parentTyp 
Where parentTyp.parentID = 0 
Union All 
Select childTyp.ID, 
    childTyp.geraeteTyp, 
    childTyp.parentID, 
    gt.Ebene + 1 As Ebene 
From test_table_GeraeteTyp As childTyp 
    Inner Join Geraetetypen As gt On childTyp.parentID = gt.TypID) 
Select * 
From 
Geraetetypen 

現在我得到的ID,姓名,PARENTID和水平。

謝謝!

回答

3

將它添加到上面的查詢,那麼就呼應了下去遞歸:

With 
    Geraetetypen(TypID, Typname, ParentID,  Ebene, TopParent) As (Select parentTyp.ID, 
     parentTyp.geraeteTyp, 
     IsNull(parentTyp.parentID, 0) parentID, 
    1 As Ebene, 
    parentTyp.ID TopParent              
From test_table_GeraeteTyp As parentTyp 
Where parentTyp.parentID = 0 
Union All 
Select childTyp.ID, 
    childTyp.geraeteTyp, 
    childTyp.parentID, 
    gt.Ebene + 1 As Ebene, 
    gt.TopParent                  
From test_table_GeraeteTyp As childTyp 
    Inner Join Geraetetypen As gt On  childTyp.parentID = gt.TypID) 
Select * 
From 
Geraetetypen 

Here's a SQLFiddle