世代数を求めよう
この演習では、ランダムな家系図を見ていきます。データセット family は、ID、name、ParentID の3列で構成されています。
あなたのタスクは、世代数を計算することです。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);