使用SQLSERVER 2005/2008 遞歸CTE查詢樹型結(jié)構(gòu)的方法
更新時間:2011年10月31日 23:36:12 作者:
我們經(jīng)常遇到樹型結(jié)構(gòu),把它們顯示在一個類似TreeView控件上的情況。這時我們可以使用Recursive Common Table Expressions(CTE)實現(xiàn)
下面是一個簡單的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:
復(fù)制代碼 代碼如下:
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
您可能感興趣的文章:
- sql server使用公用表表達式CTE通過遞歸方式編寫通用函數(shù)自動生成連續(xù)數(shù)字和日期
- SqlServer使用公用表表達式(CTE)實現(xiàn)無限級樹形構(gòu)建
- SQL Server 公用表表達式(CTE)實現(xiàn)遞歸的方法
- 使用SqlServer CTE遞歸查詢處理樹、圖和層次結(jié)構(gòu)
- 在sqlserver中如何使用CTE解決復(fù)雜查詢問題
- SQL SERVER 2008 CTE生成結(jié)點的FullPath
- SQLSERVER2008中CTE的Split與CLR的性能比較
- SQL?Server使用T-SQL進階之公用表表達式(CTE)
相關(guān)文章
sql里將重復(fù)行數(shù)據(jù)合并為一行數(shù)據(jù)使用逗號進行分隔
sql里將重復(fù)行數(shù)據(jù)合并為一行,將多行fieldname字段的內(nèi)容串聯(lián)起來,用逗號分隔,接下來為大家介紹下詳細的實現(xiàn)sql語句,希望對你有所幫助2013-04-04
SQL2005 provider: 命名管道提供程序 error: 40 無法打開到 SQL Server 的連接
這篇文章主要介紹了SQL2005 provider: 命名管道提供程序 error: 40 無法打開到 SQL Server 的連接,需要的朋友可以參考下2015-01-01
SQLServer2005混合模式登錄配置(用戶登錄錯誤18452,233,4064)
這篇文章主要介紹了SQLServer2005混合模式登錄配置(用戶登錄錯誤18452,233,4064),需要的朋友可以參考下2014-07-07
SQL2005 學(xué)習(xí)筆記 窗口函數(shù)(OVER)
SQL Server 2005中的窗口函數(shù)幫助你迅速查看不同級別的聚合,通過它可以非常方便地累計總數(shù)、移動平均值、以及執(zhí)行其它計算。2009-07-07
SQL Server中TRUNCATE事務(wù)回滾操作方法
本文介紹在事務(wù)中回滾TRUNCATE操作的方法,并演示了操作的結(jié)果,是可以對TRUNCATE進行回滾操作的。2016-05-05
安裝SQL2005時出現(xiàn)的版本變更檢查SKUUPGRADE=1問題的解決方法
這篇文章主要介紹了安裝SQL2005時出現(xiàn)的版本變更檢查SKUUPGRADE=1問題的解決方法,需要的朋友可以參考下2015-01-01
SQL2005Express中導(dǎo)入ACCESS數(shù)據(jù)庫的兩種方法
這篇文章主要介紹了SQL2005Express中導(dǎo)入ACCESS數(shù)據(jù)庫的方法,需要的朋友可以參考下2014-09-09

