使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法


  本文标签:递归,CTE,树型结构

下面是一个简单的Family Tree 示例:
复制代码 代码如下:

DECLARE @TT TABLE (ID int,Relation varchar(25),Name varchar(25),ParentID int)
INSERT @TT SELECT 1, Great GrandFather , Thomas Bishop, null UNION ALL
SELECT 2,Grand Mom, Elian Thomas Wilson , 1 UNION ALL
SELECT 3, Dad, James Wilson,2 UNION ALL
SELECT 4, Uncle, Michael Wilson, 2 UNION ALL
SELECT 5, Aunt, Nancy Manor, 2 UNION ALL
SELECT 6, Grand Uncle, Michael Bishop, 1 UNION ALL
SELECT 7, Brother, David James Wilson,3 UNION ALL
SELECT 8, Sister, Michelle Clark, 3 UNION ALL
SELECT 9, Brother, Robert James Wilson, 3 UNION ALL
SELECT 10, Me, Steve James Wilson, 3

----------Query---------------------------------------
;WITH FamilyTree
AS(
SELECT *, CAST(NULL AS VARCHAR(25)) AS ParentName, 0 AS Generation FROM @TT
WHERE ParentID IS NULL
UNION ALL
SELECT Fam.*,FamilyTree.Name AS ParentName, Generation + 1 FROM @TT AS Fam
INNER JOIN FamilyTree ON Fam.ParentID = FamilyTree.ID
)SELECT * FROM FamilyTree

Output:

query_result
希望对您有帮助

Author: Petter Liu