Кто мой руководитель?
В этом упражнении нужно получить путь от руководителя на вершине иерархии до сотрудников на её нижних уровнях. Для этого необходимо объединить информацию, полученную на каждом шаге, в одно поле. Сделать это можно, соединив значения ID с помощью CAST() — для преобразования числа в строку. Например: CAST(ID AS VARCHAR(MAX)) преобразует ID числового типа в символьный.
Задача — найти путь для сотрудников Chris Feierabend с ID=18 и Jasmin Mentil с ID=16 вплоть до вершины организации. Результат должен выглядеть так: boss_first_level -> boss_second_level .... В выборке должны быть идентификаторы сотрудников, а не их имена.
Это упражнение является частью курса
Иерархические и рекурсивные запросы в SQL Server
Инструкции к упражнению
- Инициализируйте
Path, используяIDруководителя (0) и начальное условие рекурсии. - Объедините якорный элемент с помощью
UNIONи определите поля рекурсивного элемента (ID,Name,Supervisor). - На каждом шаге добавляйте
IDруководителяSupervisorк значениюPath. - Выберите в CTE идентификаторы сотрудников
Chris FeierabendиJasmin Mentil.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
WITH employee_Hierarchy AS (
SELECT
ID,
NAME,
Supervisor,
-- Initialize the Path with CAST
___('___' AS VARCHAR(MAX)) as Path
FROM employee
WHERE Supervisor = 0
-- UNION the anchor query
___ ALL
-- Select the recursive query fields
SELECT
emp.___,
emp.___,
emp.___,
-- Add the supervisor in each step. CAST the supervisor.
Path + '->' + ___(emp.___ AS VARCHAR(MAX))
FROM employee emp
INNER JOIN employee_Hierarchy
ON emp.Supervisor = employee_Hierarchy.ID
)
SELECT Path
FROM employee_Hierarchy
-- Select the employees Chris Feierabend and Jasmin Mentil
WHERE ___ = 16 OR ID = ___;