始める無料で始める

階層上の位置を取得する

再帰を扱う際の重要な課題は、再帰の深さ(レベル)を追跡することです。IT 組織では、これは各従業員が階層のどの位置にいるかを管理することを意味します。

A section of the entire hierarchy

そのために、現在の再帰ステップを記録する LEVEL フィールドを使います。アンカー メンバーでこのフィールドを導入し、再帰メンバーでは各ステップでこの値をインクリメントしてください。

最初の階層レベルは 0、2 番目のレベルは 1、その先も同様であることに注意してください。

この演習はコースの一部です

SQL Server における階層型クエリと再帰クエリ

コースを見る

演習の手順

  • 再帰の開始時に LEVEL フィールドを 1 に初期化します。
  • Supervisor を条件にフィルタして、CTE の初期ステップとして IT ディレクターの情報を選択します。
  • 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;
コードを編集して実行