Alle mogelijke ouders in één veld ophalen?
Je laatste taak in dit hoofdstuk is om alle mogelijke ouders te vinden vanaf één ID en de ID's van alle gevonden generaties in één veld te combineren.
Hiervoor ga je recursief zoeken naar alle mogelijke leden en deze informatie aan één veld toevoegen. Je moet de CAST()-operator gebruiken om ID's samen te voegen tot één string.
Je zoekt naar alle familieleden vanaf ID = 290. In totaal zijn er 300 records in de tabel family.
Deze oefening maakt deel uit van de cursus
Hiërarchische en recursieve queries in SQL Server
Oefeninstructies
- Stel de
ParentIDvan 290 in als startpunt. - Als
Parent.ID = ''in deCASE-uitdrukking, moet het veldParentworden ingesteld op de huidigeParentID. - Als
Parent.ID <> ''in deCASE-uitdrukking, moet de Parent ID bij elke iteratie aan de huidige Parent worden toegevoegd. - Selecteer
NameenParentuit de gedefinieerde CTE.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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 ___;