Получить всех подчиненных на основе маркера линейного менеджера - PullRequest
0 голосов
/ 08 октября 2019

У меня есть таблица сотрудников, которая содержит идентификатор сотрудника, имя ... и т. Д. .... и intLineManager. intLine manager - это идентификатор сотрудника вашего линейного менеджера. Примерно так: Дейв - главный босс без менеджера.

intEmpID |Name|intLineManager
1        |Dave| NULL
2        |Sue |1
3        |Mike|1
4        |Matt|2
5        |Sara|3
6        |Paul|4

Я ищу сценарий SQL, который вернет всех сотрудников, которые находятся ниже человека. Таким образом, поиск по Майку вернет Сару, поиск по Сью вернет Мэтта + Пола и, наконец, поиск по Дейву вернет всех.

1 Ответ

1 голос
/ 08 октября 2019

Вы можете использовать рекурсив CTE, например, так:

CREATE TABLE #Employees(EmpID int, Name varchar(10), LineManager int NULL)
INSERT INTO #Employees VALUES
(1, 'Dave', NULL), 
(2, 'Sue', 1), 
(3, 'Mike', 1), 
(4, 'Matt', 2), 
(5, 'Sara', 3), 
(6, 'Paul', 4)

;WITH CTE as 
(
        SELECT EmpID, Name, LineManager
        FROM #Employees     
        WHERE EmpID = 2 --Sue

        UNION ALL

        SELECT e.EmpID, e.Name, e.LineManager
        FROM #Employees AS E
        INNER JOIN CTE AS C ON c.EmpID = e.LineManager
)
SELECT * 
FROM CTE
where EmpID > (SELECT TOP 1 EmpID FROM CTE)
ORDER BY EmpID

Результат для иска (EmpID 2)

EmpID       Name       LineManager
----------- ---------- -----------
4           Matt       2
6           Paul       4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...