使用SQLSERVER 2005/2008 递归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:


希望对您有帮助

Author: Petter Liu



相关阅读:
linux samba user共享方式配置
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
配置支持SSI
js select多选列表传值代码
Windows IIS 6安全保护贴—URL授权全攻略!
用正则删除不包含某个字符串的行的代码
红帽称盈利第一 放弃开发消费Linux桌面
Ajax教程:揭开Ajax核心的神秘面纱
在Fedora 9中启用ext4文件系统的方法
PHP 中检查或过滤IP地址的实现代码
表单对象textarea内容的格式控制(回车、换行、空格)
phpwind护身符道具不过期问题
ASP.net Textbox的技巧使用
jQuery 绝对入门
快速导航

Copyright © 2016 phpStudy | 皖ICP备18014864号-4