Nunca uso CTE con recursividad. Estaba leyendo un artículo al respecto. Este artículo muestra la información de los empleados con la ayuda del servidor SQL CTE y la recursividad. Básicamente, muestra información a los empleados y a su gerente. No puedo entender cómo funciona esta consulta. Aquí está la consulta:
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
Aquí estoy publicando sobre cómo se muestra la salida:
Solo necesito saber cómo se muestra al gerente primero y luego a su subordinado en un bucle. Supongo que la primera declaración SQL se activa solo una vez y devuelve todos los ID de empleado.
Y la segunda consulta se dispara repetidamente, consultando la base de datos en la que existe el empleado con la identificación del gerente actual.
Explique cómo se ejecuta la instrucción sql en un bucle interno y también dígame el orden de ejecución de SQL. Gracias.
MI 2da fase de pregunta
;WITH Numbers AS
(
SELECT n = 1
UNION ALL
SELECT n + 1
FROM Numbers
WHERE n+1 <= 10
)
SELECT n
FROM Numbers
P 1) ¿cómo se incrementa el valor de N? si el valor se asigna a N cada vez, entonces el valor N se puede incrementar, pero solo la primera vez que se inicializó el valor N.
P 2) CTE y recursividad de relaciones laborales:
En el momento en que agrego dos gerentes y agrego algunos empleados más bajo el segundo gerente, es donde comienza el problema.
Quiero mostrar el primer detalle del gerente y en las siguientes filas solo los detalles del empleado que se relacionan con el subordinado de ese gerente.
Suponer
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
Quiero mostrar los resultados de esa manera con expresiones CTE. Por favor, dígame qué modificar en mi sql que di aquí para extraer las relaciones gerente-empleado. Gracias.
Quiero que la salida sea así:
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
Es posible...?