Я никогда не использую CTE с рекурсией. Я просто читал статью об этом. В этой статье представлена информация о сотруднике с помощью SQL Server CTE и рекурсии. В основном это показывает сотрудников и их менеджеров. Я не могу понять, как работает этот запрос. Вот запрос:
WITH
cteReports (EmpID, FirstName, LastName, MgrID, EmpLevel)
AS
(
SELECT EmployeeID, FirstName, LastName, ManagerID, 1
FROM Employees
WHERE ManagerID IS NULL
UNION ALL
SELECT e.EmployeeID, e.FirstName, e.LastName, e.ManagerID,
r.EmpLevel + 1
FROM Employees e
INNER JOIN cteReports r
ON e.ManagerID = r.EmpID
)
SELECT
FirstName + ' ' + LastName AS FullName,
EmpLevel,
(SELECT FirstName + ' ' + LastName FROM Employees
WHERE EmployeeID = cteReports.MgrID) AS Manager
FROM cteReports
ORDER BY EmpLevel, MgrID
Здесь я размещаю информацию о том, как выводится вывод:
Мне просто нужно знать, как он показывает менеджера сначала, а затем его подчиненный в цикле. Я предполагаю, что первый оператор sql срабатывает только один раз и возвращает все идентификаторы сотрудников.
И второй запрос повторно срабатывает, запрашивая базу данных, в которой сотрудник существует с текущим идентификатором менеджера.
Просьба пояснить, как выполняется оператор sql во внутреннем цикле, а также указать порядок выполнения sql. Спасибо.
Моя вторая фаза вопроса
;WITH Numbers AS
(
SELECT n = 1
UNION ALL
SELECT n + 1
FROM Numbers
WHERE n+1 <= 10
)
SELECT n
FROM Numbers
Q 1) как увеличивается значение N? если значение присваивается N каждый раз, тогда значение N может быть увеличено, но только начальное значение N было инициализировано.
Q 2) CTE и рекурсия отношений сотрудников:
В тот момент, когда я добавляю двух менеджеров и добавляю еще несколько сотрудников под вторым менеджером, проблема начинается.
Я хочу отобразить первую подробную информацию о менеджере, а в следующих строках - только те данные сотрудников, которые относятся к подчиненному этому менеджеру.
Пусть
ID Name MgrID Level
--- ---- ------ -----
1 Keith NULL 1
2 Josh 1 2
3 Robin 1 2
4 Raja 2 3
5 Tridip NULL 1
6 Arijit 5 2
7 Amit 5 2
8 Dev 6 3
Я хочу показать результаты таким образом с выражениями CTE. Скажите, пожалуйста, что изменить в моем sql, который я здесь привел, чтобы вытащить отношения между менеджером и сотрудником. Спасибо.
Я хочу, чтобы результат был таким:
ID Name MgrID nLevel Family
----------- ------ ----------- ----------- --------------------
1 Keith NULL 1 1
3 Robin 1 2 1
2 Josh 1 2 1
4 Raja 2 3 1
5 Tridip NULL 1 2
7 Amit 5 2 2
6 Arijit 5 2 2
8 Dev 6 3 2
Возможно ли это??