递归CTE SQL获取所有级别

递归CTE SQL获取所有级别,sql,recursion,common-table-expression,Sql,Recursion,Common Table Expression,我必须用递归CTE创建一个sql查询,我不知道如何继续 我的表有许多条目,它们都有一个Id和一个parentId 我想得到一个这样的结构: 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 * FRO

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

我的表有许多条目,它们都有一个Id和一个parentId

我想得到一个这样的结构:

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
  • 母公司
    • 孩子
    • 孩子
  • 母公司
    • 孩子
等等

所有具有父项的条目都应列在父项下。 (我的桌子有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,下面有所有的子项。多个条目都可以

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