Wszystkie możliwe elementy nadrzędne w jednym polu?
Ostatnim zadaniem w tym rozdziale jest znalezienie wszystkich możliwych elementów nadrzędnych, zaczynając od jednego ID, i połączenie ID wszystkich znalezionych generacji w jedno pole.
W tym celu rekurencyjnie wyszukasz wszystkich możliwych członków i dodasz te informacje do jednego pola. Musisz użyć operatora CAST(), aby połączyć wartości ID w ciąg znaków.
Wyszukiwanie obejmie wszystkich członków rodziny, zaczynając od ID = 290. Tabela family zawiera łącznie 300 wpisów.
To ćwiczenie jest częścią kursu
Hierarchiczne i rekurencyjne zapytania w SQL Server
Instrukcje do ćwiczenia
- Ustaw
ParentIDrówne 290 jako punkt startowy. - Jeśli
Parent.ID = ''w operacjiCASE, poleParentpowinno zostać ustawione na bieżąceParentID. - Jeśli
Parent.ID <> ''w operacjiCASE, ID elementu nadrzędnego powinno być dodawane do bieżącego elementuParentw każdej iteracji. - Wybierz pola
NameiParentze zdefiniowanego CTE.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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 ___;