递归CTE SQL获取所有级别

时间:2017-10-18 16:15:57

标签: sql recursion common-table-expression

我必须使用递归CTE创建一个sql查询,我不知道如何继续。

我的表有很多条目,都有Id和parentId。

我希望得到这样的结构:

等等......

所有拥有父项的条目都应列在父项下。 (我的表有3到5级,我现在不确定。)

我最近的尝试看起来像这样:

WITH Query AS 
( 
SELECT P.Name, P.Id, P.ParentId
FROM Table P 

UNION ALL

SELECT P1.Name, P1.Id, P1.ParentId
FROM Table P1
INNER JOIN Query M ON M.ParentId = P1.Id
)
SELECT * FROM Query

我尝试过不同的CTE但未达到我的目标。 我在这个问题上工作了很多时间,并且不知道如何处理。 我希望有人可以帮助我。提前谢谢。

我只希望每个条目的顶部都有一个ParentId,而下面的所有子项目都是如此。多个条目都可以。

1 个答案:

答案 0 :(得分:1)

;WITH Query AS 
( 
SELECT P.Name, P.Id, P.ParentId
FROM Table P 
where P.ParentId = 0 -- assume root level records have ParentId = 0

UNION ALL

SELECT C.Name, C.Id, C.ParentId
FROM Table C
INNER JOIN Query P ON P.Id = C.ParentId
)
SELECT * FROM Query
option ( MaxRecursion 0 );