取得世代數量?
在這個練習中,我們要查看一個隨機的家譜。資料集 family 有三個欄位:ID、name 和 ParentID。
你的任務是計算世代的數量。你會從 ParentID = 101 的那個人開始,來計算所有的世代。
為了完成這個任務,你需要計算遞迴的 LEVEL,它代表世代階層中的目前層級。之後,使用 COUNT() 來計算 LEVEL 的數量。請記住,層級的計數就是世代的數量;例如,層級數為 100,表示你找到了 100 個世代。
本練習屬於課程
SQL Server 的階層式與遞迴查詢
練習說明
- 以將
ParentID設為101來初始化遞迴的起點。 - 將
LEVEL設為目前的遞迴步驟。 - 以父節點與子節點的 ID,將錨點成員與 CTE 進行連接。
- 使用
COUNT()計算世代的數量。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
WITH children AS (
SELECT
ID,
Name,
ParentID,
0 as LEVEL
FROM family
-- Set the targeted parent as recursion start
WHERE ___ = ___
UNION ALL
SELECT
child.ID,
child.NAME,
child.ParentID,
-- Increment LEVEL by 1 each step
___ + ___
FROM family child
INNER JOIN children
-- Join the anchor query with the CTE
ON child.___ = children.___)
SELECT
-- Count the number of generations
___(___) as Generations
FROM children
OPTION(MAXRECURSION 300);