開始使用免費開始

取得層級位置

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

A section of the entire hierarchy

為了達成這點,你會使用 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;
編輯並執行程式碼