Ich benutze CTE nie mit Rekursion. Ich habe gerade einen Artikel darüber gelesen. Dieser Artikel zeigt Mitarbeiterinformationen mit Hilfe von SQL Server CTE und Rekursion. Grundsätzlich werden Mitarbeiter und deren Managerinformationen angezeigt. Ich kann nicht verstehen, wie diese Abfrage funktioniert. Hier ist die Abfrage:
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
Hier poste ich darüber, wie die Ausgabe angezeigt wird:
Ich muss nur wissen, wie es zuerst den Manager und dann seinen Untergebenen in einer Schleife zeigt. Ich denke, die erste SQL-Anweisung wird nur einmal ausgelöst und gibt alle Mitarbeiter-IDs zurück.
Die zweite Abfrage wird wiederholt ausgelöst und fragt die Datenbank ab, in der der Mitarbeiter mit der aktuellen Manager-ID vorhanden ist.
Bitte erläutern Sie, wie die SQL-Anweisung in einer internen Schleife ausgeführt wird, und teilen Sie mir auch die SQL-Ausführungsreihenfolge mit. Vielen Dank.
MEINE 2. Phase der Frage
;WITH Numbers AS
(
SELECT n = 1
UNION ALL
SELECT n + 1
FROM Numbers
WHERE n+1 <= 10
)
SELECT n
FROM Numbers
F 1) Wie wird der Wert von N erhöht? Wenn der Wert jedes Mal N zugewiesen wird, kann der N-Wert erhöht werden, aber nur beim ersten Initialisieren des N-Werts.
F 2) CTE und Rekursion der Mitarbeiterbeziehungen:
In dem Moment, in dem ich zwei Manager und ein paar weitere Mitarbeiter unter dem zweiten Manager hinzufüge, beginnt das Problem.
Ich möchte das erste Managerdetail und in den nächsten Zeilen nur die Mitarbeiterdetails anzeigen, die sich auf den Untergebenen dieses Managers beziehen.
Annehmen
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
Ich möchte die Ergebnisse so mit CTE-Ausdrücken anzeigen. Bitte sagen Sie mir, was ich in meinem SQL ändern soll, das ich hier angegeben habe, um die Beziehungen zwischen Manager und Mitarbeiter zu verbessern. Vielen Dank.
Ich möchte, dass die Ausgabe folgendermaßen aussieht:
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
Ist das möglich...?