2011-03-03 15 views
5

Actualmente estoy ejecutando una consulta CTE para construir recursivamente una jerarquía de empleados de una tabla de empleados similar a la que muestran la mayoría de los ejemplos recursivos. Donde estoy atascado es que estoy tratando de buscar un solo empleado y recuperar la jerarquía por encima de él. A continuación se muestra un ejemplo de la tabla que estoy tratando de trabajar con:SQL CTE Recursion: Registros primarios recurrentes

Employees 
=========================================================================== 
EmployeeID MgrID Name 
1    null  Joe 
2    1  John 
3    2  Rob 
4    2  Eric 

El siguiente es el SQL que me permite mostrar la jerarquía de arriba hacia abajo:

with employeeMaster as (
    select p.EmployeeID, p.MgrID, p.Name 
    from Employees p 
    where p.MgrID is null 

    union all 

    select c.EmployeeID, c.MgrID, c.Name 
    from employeeMaster cte inner join Employees c on c.MgrID = cte.EmployeeID 
) 
select * from employeeMaster 

Dónde estoy atascado es que no puedo encontrar la manera de consultar al empleado del nivel más bajo, ya sea Rob o Eric, y devolver la jerarquía por encima de él a Joe> John> Eric. Parece que esto debería ser fácil, pero no puedo detectarlo por mi vida.

Respuesta

8

¿Está buscando una consulta para devolver un número variable de columnas, dependiendo de la profundidad de la jerarquía? ¿O solo una cadena concatenada en un campo?

Aquí hay un pequeño cambio en su consulta que hará que Eric y cualquier persona superior a él en la jerarquía.

WITH employeeMaster 
     AS (SELECT p.EmployeeID , 
        p.MgrID , 
        p.NAME 
      FROM  Employees p 
      WHERE p.NAME = 'Eric' 
      UNION ALL 
      SELECT c.EmployeeID , 
        c.MgrID , 
        c.NAME 
      FROM  employeeMaster cte 
        INNER JOIN Employees c ON c.EmployeeID = cte.MgrID 
     ) 
SELECT * 
FROM employeeMaster m 
+0

Usando el ejemplo de la tabla en mi publicación, me gustaría consultar a Eric y devolver un conjunto de registros con tres registros que muestran su registro y las dos personas por encima de él. El objetivo final es hacer una consulta competente a cualquier empleado y ver la cadena de mando de ese empleado hasta llegar a la cima. – Tehrab

+0

Lo edité para darte Eric y sus gerentes. –

+0

Siempre las cosas simples. Marcado como respondido. – Tehrab