Bắt đầu ngayBắt đầu miễn phí

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.

A section of the entire hierarchy

Để 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

Xem khóa học

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 LEVEL bằng với bước đệ quy hiện tại.
  • Thực hiện JOIN với CTE đã định nghĩa dựa trên ID củ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;
Chỉnh sửa và Chạy Mã