Je n'utilise jamais le CTE avec la récursion. J'étais juste en train de lire un article à ce sujet. Cet article montre des informations sur les employés avec l'aide de Sql server CTE et de la récursion. Il s'agit essentiellement de montrer les informations sur les employés et leur manager. Je n'arrive pas à comprendre comment fonctionne cette requête. Voici la requête :
WITH
cteReports (EmpID, FirstName, LastName, MgrID, EmpLevel)
AS
(
SELECT EmployeeID, FirstName, LastName, ManagerID, 1
FROM Employees
WHERE ManagerID IS NULL
UNION ALL
SELECT e.EmployeeID, e.FirstName, e.LastName, e.ManagerID,
r.EmpLevel + 1
FROM Employees e
INNER JOIN cteReports r
ON e.ManagerID = r.EmpID
)
SELECT
FirstName + ' ' + LastName AS FullName,
EmpLevel,
(SELECT FirstName + ' ' + LastName FROM Employees
WHERE EmployeeID = cteReports.MgrID) AS Manager
FROM cteReports
ORDER BY EmpLevel, MgrID
Je suis en train d'écrire sur la façon dont la sortie est montrée :
J'ai juste besoin de savoir comment il est possible de montrer le manager d'abord et ensuite son subordonné dans une boucle. Je suppose que la première instruction SQL ne s'exécute qu'une fois et qu'elle renvoie tous les numéros d'identification des employés.
Et la deuxième requête se déclenche de manière répétée, en interrogeant la base de données sur l'employé existant avec l'id du manager actuel.
Veuillez m'expliquer comment l'instruction sql s'exécute dans une boucle interne et me dire également l'ordre d'exécution sql. Merci.
MA 2ème phase de question
;WITH Numbers AS
(
SELECT n = 1
UNION ALL
SELECT n + 1
FROM Numbers
WHERE n+1 <= 10
)
SELECT n
FROM Numbers
Q 1) Comment la valeur de N est-elle incrémentée ? Si la valeur est attribuée à N à chaque fois, alors la valeur de N peut être incrémentée mais seulement la première fois que la valeur de N a été initialisée.
Q 2) CTE et récursion des relations avec les employés :
Le problème commence au moment où j'ajoute deux managers et quelques employés supplémentaires sous le second manager.
Je veux afficher les détails du premier manager et dans les lignes suivantes, seulement les détails de l'employé qui se rapportent au subordonné de ce manager.
Supposons que
ID Name MgrID Level
--- ---- ------ -----
1 Keith NULL 1
2 Josh 1 2
3 Robin 1 2
4 Raja 2 3
5 Tridip NULL 1
6 Arijit 5 2
7 Amit 5 2
8 Dev 6 3
Je veux afficher les résultats de cette manière avec des expressions CTE. S'il vous plaît, dites-moi ce que je dois modifier dans mon sql que j'ai donné ici afin de tirer les relations manager-employé. Merci.
Je veux que la sortie soit comme ceci :
ID Name MgrID nLevel Family
----------- ------ ----------- ----------- --------------------
1 Keith NULL 1 1
3 Robin 1 2 1
2 Josh 1 2 1
4 Raja 2 3 1
5 Tridip NULL 1 2
7 Amit 5 2 2
6 Arijit 5 2 2
8 Dev 6 3 2
Est-ce possible... ?