Câte generații există?
În acest exercițiu, vom analiza un arbore genealogic aleatoriu. Setul de date family conține trei coloane: ID, name și ParentID.
Sarcina ta este să calculezi numărul de generații. Vei face acest lucru numărând toate generațiile care pornesc de la persoana cu ParentID = 101.
Pentru această sarcină, trebuie să calculezi LEVEL-ul recursiei, care reprezintă nivelul curent în ierarhia generațiilor. Apoi, trebuie să numeri câte LEVEL-uri există folosind COUNT(). Reține că numărul de niveluri reprezintă numărul de generații – de exemplu, un număr de 100 de niveluri înseamnă că ai găsit 100 de generații.
Acest exercițiu face parte din cursul
Interogări ierarhice și recursive în SQL Server
Instrucțiuni pentru exercițiu
- Inițializează punctul de start al recursiei setând
ParentIDla101. - Setează
LEVELla pasul curent al recursiei. - Unește membrul ancoră cu CTE-ul pe baza ID-ului părintelui și al copilului.
- Numără numărul de generații folosind
COUNT().
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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);