2013-08-02 35 views
0

我有以下要求,母兒層次

輸入

CID ParentID 

1 10 
2 1 
3 1 
4 2 
5 2 
6 2 
7 2 
8 4 
9 4 
10 NULL 
20 25 
30 38 
15 51 
17 71 

當我通過孩子值4以下是我想要的輸出:

所需的輸出:

CID ParentID 
2 4 
1 2 
10 1 
NULL 10 
4 2 
4 8 
2 4 
2 5 
2 6 
1 3 
2 7 

請幫忙!提前致謝。

+1

請深入解釋 –

+0

以及我可以編寫硬編碼過程獲取此輸入並給出此輸出可以嗎?如果不是,請解釋你想要什麼 –

+0

究竟發生了什麼事情? – zxc

回答

0

您的解釋與您的數據不符。我認爲結果中的第(4,2)行應該是(4,9)。如果我是正確的,那麼這應該做你想要什麼:

with Parents(lvl, CID, ParentID) as (
    select 0, ParentID, CID 
    from T 
    where CID = 4 
    union all 
    select lvl+1, T.ParentID, T.CID 
    from T join Parents 
    on T.CID = Parents.CID 
) 
    select CID, ParentID 
    from Parents 
    union all 
    select T.ParentID, T.CID 
    from T join Parents 
    on Parents.ParentID = T.ParentID; 

SQL小提琴here

+0

我可以遞歸到下一個>下一個層次:假設如果8是父項並且它具有子值,我可以獲得它們嗎? – MGM