2016-12-29 39 views
2

我有有這樣的父子關係的表 - Isfinal列顧名思義是SQL - 多級自加入

ID name ParentId Isfinal 
1  abc  0   No 
2  acd  1   No 
3  ads  1   No 
4  xyz  2   No 
5  xxy  2   Yes 
6  plm  3   No 
7  ytr  4   Yes 
8  lks  6   Yes 

我想寫一個動態查詢這將是平的最後一個元素給該ID的子元素。

E.G.

如果我選擇2那麼就應該給予的結果 -

ID name ParentId Isfinal 
4  xyz  2   No 
5  xxy  2   Yes 
7  ytr  4   Yes 

是否有可能自加入?

+0

你可以在這裏嘗試一個遞歸CTE。 –

+0

@AbdulRasheed好吧..我是一種新的SQL。如果你能提供某些東西的話,這將會很有幫助 –

回答

3

使用遞歸CTE,可以解決這個問題。

DECLARE @TABLE TABLE 
( ID   int 
    ,name  nvarchar(200) 
    ,ParentId int 
    ,Isfinal nvarchar(20) 
) 

INSERT INTO @TABLE 
VALUES (1,'abc',0,'No'),(2,'acd',1,'No'),(3,'ads',1,'No'), 
     (4,'xyz',2,'No'),(5,'xxy',2,'Yes'),(6,'plm',3,'No'), 
     (7,'ytr',4,'Yes'),(8,'lks',6,'Yes') 

DECLARE @ID INT = 2 

;WITH CTE 
AS 
(
    SELECT ID,name,ParentId,Isfinal 
    FROM @TABLE 
    WHERE ParentId = @ID 

    UNION ALL 

    SELECT T.ID,T.name,T.ParentId,T.Isfinal 
    FROM @TABLE T 
     INNER JOIN CTE C ON C.ID = T.ParentId 
) 

SELECT * FROM CTE