Все возможные родители в одном поле?
Ваше финальное задание в этой главе — найти всех возможных родителей, начиная с одного ID, и объединить идентификаторы всех найденных поколений в одно поле.
Для этого вы будете рекурсивно искать всех возможных членов семьи и добавлять эту информацию в одно поле. Чтобы объединить ID в строку, используйте оператор CAST().
Поиск членов семьи начнётся с ID = 290. Всего в таблице family содержится 300 записей.
Это упражнение является частью курса
Иерархические и рекурсивные запросы в SQL Server
Инструкции к упражнению
- Укажите
ParentIDравным 290 в качестве начальной точки. - Если
Parent.ID = ''в операцииCASE, задайте полюParentзначение текущегоParentID. - Если
Parent.ID <> ''в операцииCASE, добавляйте ID родителя к текущему значениюParentна каждой итерации. - Выберите поля
NameиParentиз определённого CTE.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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 ___;