5

mia tavola contiene tre colonne e il valore è simile al seguentequery SQL per trovare i tutti i subalterni sotto un unico superiore

Emp_ID | Emp_Name | Emp_Manager_ID 
======================================== 
1  | Admin  | Null   
2  | John  | 1    
3  | Sam  | 2    
4  | Mike  | 2    
5  | Jeff  | 4    
6  | Ben  | 3    
7  | Vicky  | 5 

Il parametro id = @emp_id 2 Il risultato atteso per trovare tutti i subalterni sotto dato eMP_ID quindi il risultato dovrebbe essere tutti EmpIDs 3,4,5,6,7 perché 2 è il gestore di 3,4 e 3 è il gestore di 6, 4 è responsabile della direzione 5 e 5 è il gestore di 7

+0

Ho aggiornato la mia risposta per includere un esempio della CTE di lavoro. Fammi sapere se incontri altri problemi. –

+0

@Adam Grazie funziona bene –

risposta

7

Utilizzando una Recursing CTE . Questo attualmente restituisce tutte e tre le colonne. Rimuovere Emp_Name e Emp_Manager_ID dal SELECT se non si richiedono tali informazioni.

WITH Subordinates AS 
(
    SELECT e.Emp_ID, e.Emp_Name, e.Emp_Manager_ID 
    FROM Employee AS e 
    WHERE e.Emp_Manager_ID = 2 

    UNION ALL 

    SELECT e.Emp_ID, e.Emp_Name, e.Emp_Manager_ID 
    FROM Employee AS e 
    INNER JOIN Subordinates AS sub ON e.Emp_Manager_ID = sub.Emp_ID 
) 
SELECT s.Emp_ID, s.Emp_Name, s.Emp_Manager_ID 
FROM Subordinates AS s 

Example of query running using Employee_ID = 1:

+0

Il problema è stato risolto nella mia tabella il primo id gestore rown era 1 passa attraverso un ciclo infinito quindi –