Quel superviseur ai-je ?
Dans cet exercice, nous voulons obtenir le chemin allant du patron au sommet de la hiérarchie jusqu’aux employés tout en bas. Pour cela, nous devons concaténer, à chaque étape, les informations obtenues dans un seul champ. Vous pouvez le faire en combinant les ID en utilisant CAST() pour passer du nombre à la chaîne. Par exemple, CAST(ID AS VARCHAR(MAX)) permet de convertir ID de type numérique en type texte.
La tâche consiste maintenant à trouver le chemin pour les employés Chris Feierabend avec ID=18 et Jasmin Mentil avec ID=16 jusqu’au sommet de l’organisation. La sortie doit ressembler à ceci : boss_first_level -> boss_second_level .... Sélectionnez les IDs des employés et non leurs noms.
Cet exercice fait partie du cours
<cours>Requêtes hiérarchiques et récursives dans SQL Server</cours>Instructions de l’exercice
- Initialisez
Pathavec l’IDdu superviseur (0) et la condition de départ de la récursion. - Faites un
UNIONdu membre d’ancrage et définissez les champs du membre récursif (ID,Name,Supervisor). - Ajoutez l’ID du superviseur
SupervisoràPathà chaque étape. - Sélectionnez, dans la CTE, les IDs des employés
Chris FeierabendetJasmin Mentil.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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 = ___;