Toți părinții posibili într-un singur câmp?
Ultima ta sarcină din acest capitol este să găsești toți părinții posibili pornind de la un singur ID și să combini ID-urile tuturor generațiilor găsite într-un singur câmp.
Pentru a face acest lucru, vei căuta recursiv toți membrii posibili și vei adăuga aceste informații într-un singur câmp. Va trebui să folosești operatorul CAST() pentru a combina ID-urile într-un șir de caractere.
Vei căuta toți membrii familiei începând de la ID = 290. În total, există 300 de înregistrări în tabelul family.
Acest exercițiu face parte din cursul
Interogări ierarhice și recursive în SQL Server
Instrucțiuni pentru exercițiu
- Setează
ParentID290 ca punct de plecare. - Dacă
Parent.ID = ''în operațiaCASE, câmpulParenttrebuie setat laParentID-ul curent. - Dacă
Parent.ID <> ''în operațiaCASE, ID-ul părintelui trebuie adăugat la valoarea curentă a câmpului Parent la fiecare iterație. - Selectează
NameșiParentdin CTE-ul definit.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
WITH tree AS (
SELECT
ID,
Name,
ParentID,
CAST('0' AS VARCHAR(MAX)) as Parent
FROM family
-- Initialize the ParentID to 290
WHERE ___ = ___
UNION ALL
SELECT
Next.ID,
Next.Name,
Parent.ID,
CAST(CASE WHEN Parent.ID = ''
-- Set the Parent field to the current ParentID
THEN(CAST(Next.___ AS VARCHAR(MAX)))
-- Add the ParentID to the current Parent in each iteration
ELSE(Parent.Parent + ' -> ' + CAST(Next.___ AS VARCHAR(MAX)))
END AS VARCHAR(MAX))
FROM family AS Next
INNER JOIN tree AS Parent
ON Next.ParentID = Parent.ID)
-- Select the Name, Parent from tree
SELECT ___, ___
FROM ___;