我有一个像这样的父子关系的表 - Isfinal列表明它是该级别的最后一个元素
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 :(得分: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