Non uso mai CTE con la ricorsione. Stavo solo leggendo un articolo su di esso. Questo articolo mostra le informazioni sui dipendenti con l'aiuto di Sql server CTE e ricorsione. Fondamentalmente mostra i dipendenti e le informazioni del loro manager. Non sono in grado di capire come funziona questa query. Ecco la domanda:
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
Qui sto postando su come viene mostrato l'output:
Ho solo bisogno di sapere come si sta mostrando prima il manager e poi il suo subordinato in un loop. Immagino che la prima istruzione sql si attivi solo una volta e che restituisca tutti gli ID dei dipendenti.
E la seconda query si attiva ripetutamente, interrogando il database su cui esiste il dipendente con l'ID gestore corrente.
Spiega come viene eseguita l'istruzione sql in un ciclo interno e dimmi anche l'ordine di esecuzione sql. Grazie.
La mia seconda fase della domanda
;WITH Numbers AS
(
SELECT n = 1
UNION ALL
SELECT n + 1
FROM Numbers
WHERE n+1 <= 10
)
SELECT n
FROM Numbers
Q 1) come viene incrementato il valore di N? se il valore viene assegnato ogni volta a N, allora N valore può essere incrementato ma solo la prima volta che N valore è stato inizializzato.
D 2) CTE e ricorsione dei rapporti con i dipendenti:
Nel momento in cui aggiungo due manager e aggiungo altri dipendenti sotto il secondo manager è dove inizia il problema.
Desidero visualizzare il primo dettaglio del manager e nelle righe successive solo i dettagli del dipendente che si riferiscono al subordinato di quel manager.
supporre
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
Voglio visualizzare i risultati in questo modo con le espressioni CTE. Per favore dimmi cosa modificare nel mio sql che ho fornito qui per tirare le relazioni manager-dipendente. Grazie.
Voglio che l'output sia così:
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
È possibile...?