2017-10-18 140 views
0

我必须创建一个带有递归CTE的sql查询,我不知道如何继续。递归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 

我已经尝试了不同的thigs与CTE但没有达到我的目标。 我在这个问题上工作了很多小时,不知道如何过关。 我希望有人能帮助我。提前致谢。

我只希望每个条目的顶部都有一个ParentId,并且所有的子条目都在它的下面。多个条目都可以。

回答

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);