Tôi có cấp trên nào?
Trong bài tập này, bạn sẽ lấy đường đi từ sếp ở đỉnh hệ thống phân cấp xuống các nhân viên ở đáy. Để làm được điều này, bạn cần gộp thông tin thu được ở mỗi bước vào một trường. Bạn có thể làm điều đó bằng cách nối các ID và dùng CAST() để chuyển từ số sang chuỗi. Ví dụ: CAST(ID AS VARCHAR(MAX)) để chuyển ID kiểu số sang kiểu ký tự.
Nhiệm vụ là tìm đường đi cho nhân viên Chris Feierabend với ID=18 và Jasmin Mentil với ID=16 lên đến đỉnh của tổ chức. Đầu ra nên có dạng: boss_first_level -> boss_second_level .... Hãy chọn các ID của nhân viên chứ không phải tên của họ.
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
PathbằngIDcủa cấp trên (0) và điều kiện bắt đầu của đệ quy. - Dùng
UNIONđể kết hợp anchor member và định nghĩa các trường của recursive member (ID,Name,Supervisor). - Ở mỗi bước, thêm
IDcủa cấp trênSupervisorvàoPath. - Chọn các ID của nhân viên
Chris FeierabendvàJasmin Mentiltrong CTE.
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 Path with CAST
___('___' AS VARCHAR(MAX)) as Path
FROM employee
WHERE Supervisor = 0
-- UNION the anchor query
___ ALL
-- Select the recursive query fields
SELECT
emp.___,
emp.___,
emp.___,
-- Add the supervisor in each step. CAST the supervisor.
Path + '->' + ___(emp.___ AS VARCHAR(MAX))
FROM employee emp
INNER JOIN employee_Hierarchy
ON emp.Supervisor = employee_Hierarchy.ID
)
SELECT Path
FROM employee_Hierarchy
-- Select the employees Chris Feierabend and Jasmin Mentil
WHERE ___ = 16 OR ID = ___;