Xác định vị trí trong hệ thống phân cấp
Một vấn đề quan trọng khi làm việc với đệ quy là theo dõi cấp độ đệ quy. Trong tổ chức CNTT, điều này có nghĩa là theo dõi vị trí của từng nhân viên trong hệ thống phân cấp.

Để làm điều này, bạn sẽ dùng trường LEVEL để ghi nhận bước đệ quy hiện tại. Bạn cần đưa trường này vào thành viên mỏ neo (anchor member) và tăng giá trị này ở mỗi bước đệ quy trong thành viên đệ quy.
Lưu ý: cấp phân cấp đầu tiên là 0, cấp thứ hai là 1, và cứ thế tiếp tục.
Bài tập này là một phần của khóa học
Truy vấn phân cấp và đệ quy trong SQL Server
Hướng dẫn bài tập
- Khởi tạo trường
LEVEL= 1 tại thời điểm bắt đầu đệ quy. - Chọn thông tin của giám đốc CNTT làm bước khởi đầu của CTE bằng cách lọc theo
Supervisor. - Đặt
LEVELbằng với bước đệ quy hiện tại. - Thực hiện
JOINvới CTE đã định nghĩa dựa trênIDcủa người quản lý và nhân viên.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
WITH employee_hierarchy AS (
SELECT
ID,
NAME,
Supervisor,
-- Initialize the field LEVEL
___ as LEVEL
FROM employee
-- Start with the supervisor ID of the IT Director
WHERE ___ = ___
UNION ALL
SELECT
emp.ID,
emp.NAME,
emp.Supervisor,
-- Increment LEVEL by 1 each step
___ + 1
FROM employee emp
JOIN employee_hierarchy
-- JOIN on supervisor and ID
ON emp.___ = employee_hierarchy.___)
SELECT
cte.Name, cte.Level,
emp.Name as ManagerID
FROM employee_hierarchy as cte
JOIN employee as emp
ON cte.Supervisor = emp.ID
ORDER BY Level;