Я ніколи не використовую CTE при рекурсії. Я просто читав статтю про це. У цій статті відображається інформація про працівників за допомогою CTE сервера Sql та рекурсії. Це, в основному, інформація про працівників та їх керівника. Я не в змозі зрозуміти, як працює цей запит. Ось запит:
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. Дякую.
МОЙ 2-й етап питання
;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
Чи можливо це ...?