我的上级是谁?
在本练习中,我们希望从层级最顶端的老板,一路获取到层级最底部员工的路径。为此,您需要把每一步得到的信息合并到同一个字段中。可以通过将多个 ID 使用 CAST() 从数字转换为字符串后进行拼接来实现。例如,使用 CAST(ID AS VARCHAR(MAX)) 将数值类型的 ID 转换为字符类型。
现在的任务是为员工 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 = ___;