取得層級位置
在處理遞迴時,一個重要的問題是追蹤遞迴的層級。在 IT 組織中,這代表要記錄每位員工在階層裡的位置。

為了達成這點,你會使用 LEVEL 欄位來記錄目前的遞迴步驟。你需要在錨點成員(anchor member)中引入這個欄位,並在遞迴成員(recursion member)的每次遞迴中將其值遞增。
請記住,第一層級是 0,第二層級是 1,依此類推。
本練習屬於課程
SQL Server 的階層式與遞迴查詢
練習說明
- 在遞迴開始時,將
LEVEL初始化為 1。 - 以篩選
Supervisor來選出 IT 主管(IT director)的資訊,作為 CTE 的初始步驟。 - 將
LEVEL設為目前的遞迴步驟。 - 以主管與員工的
ID在已定義的 CTE 上執行JOIN。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
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;