2011-03-03 14 views
5

Attualmente sto eseguendo una query CTE per creare ricorsivamente una gerarchia di dipendenti da una tabella dei dipendenti simile a ciò che dimostrano gli esempi più ricorsivi. Dove sono bloccato è che sto cercando di interrogare un singolo dipendente e recuperare la gerarchia sopra di lui. Di seguito è riportato un esempio della tabella che sto cercando di lavorare con:Ricorsione SQL CTE: restituzione dei record principali

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

che segue è la SQL che mi permette di visualizzare la gerarchia dall'alto verso il basso:

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 

Dove sono bloccato è che non riesco a capire come interrogare il dipendente di livello più basso, Rob o Eric, e restituire la gerarchia sopra di lui da Joe> John> Eric. Sembra che dovrebbe essere facile ma non riesco a riconoscerlo per la vita di me.

risposta

8

Stai cercando una query per restituire un numero variabile di colonne, a seconda della profondità della gerarchia? O solo una stringa concatenata in un campo?

Ecco una piccola modifica alla query che otterrà Eric e chiunque sopra di lui nella gerarchia.

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

Utilizzando l'esempio di tabella nel mio post, vorrei richiedere per Eric e restituire un recordset con tre record che mostrano il suo record e le due persone sopra di lui. L'obiettivo finale è la possibilità di interrogare qualsiasi dipendente e vedere la catena di comando di quel dipendente fino in cima. – Tehrab

+0

Ho modificato per darti Eric e i suoi manager. –

+0

Sempre le cose semplici. Contrassegnato come risposta. – Tehrab