SQL-запрос, чтобы найти всех подчиненных под одним начальником - PullRequest
5 голосов
/ 02 декабря 2011

Моя таблица содержит три столбца, и значение выглядит следующим образом:

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

Параметр id @Emp_ID = 2 Ожидаемый результат для поиска всех подчиненных с заданным Emp_Id, поэтому результатом должны быть все EmpID.3,4,5,6,7 потому что 2 - менеджер 3,4, 3 - менеджер 6, 4 - менеджер 5 и 5 - менеджер 7

1 Ответ

7 голосов
/ 02 декабря 2011

Использование рекурсивного CTE .В настоящее время это возвращает все три столбца.Удалите Emp_Name и Emp_Manager_ID из SELECT, если вам не нужна эта информация.

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

Пример выполнения запроса с использованием Employee_ID = 1:

...