自分の上司は誰?
この演習では、階層の最上位にいるボスから、階層の最下位にいる従業員までのパスを取得します。そのために、各ステップで得られた情報を1つのフィールドにまとめる必要があります。これは、数値の ID を CAST() を使って文字列に変換し、連結することで実現できます。例えば、数値型の ID を文字型に変換するには CAST(ID AS VARCHAR(MAX)) のようにします。
次のタスクは、従業員 Chris Feierabend(ID=18)と Jasmin Mentil(ID=16)のパスを、組織の最上位までたどることです。出力は boss_first_level -> boss_second_level ... のような形式にしてください。選択するのは従業員の名前ではなく ID です。
この演習はコースの一部です
SQL Server における階層型クエリと再帰クエリ
演習の手順
Pathを上司(0)のIDと再帰の開始条件で初期化します。- アンカーメンバーを
UNIONし、再帰メンバーのフィールド(ID、Name、Supervisor)を定義します。 - 各ステップで上司
Supervisorの ID をPathに追加します。 - CTE 内で従業員
Chris FeierabendとJasmin Mentilの ID を選択します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
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 = ___;