SQL 来自员工 Manager/Supervisor/Employee 层次结构的报告 Table

SQL Reports for Manager/Supervisor/Employee Hierarchy from an Employee Table

我有一个员工 table,它显示员工 ID 和他们的经理 ID。经理们想要的报告不仅要显示他的直接下属,还要显示他本人和向他的直接下属报告的所有员工。

例如,我的 table 将具有以下 table:

我需要为经理 1 编写的报告将包含他的信息以及他的直接下属(主管 1 和主管 2)及其下属(员工 1 到员工 4)。

是否有某种我可以使用的连接或任何其他代码将此 table 多次关联回自身以获取间接报告?

一个recursive Common Table Expression就是你要找的:

declare @Employees table (EmpID nvarchar(15), MgrID nvarchar(15));

insert into @Employees values ('Manager1', null);
insert into @Employees values ('Supervisor1', 'Manager1');
insert into @Employees values ('Employee1', 'Supervisor1');
insert into @Employees values ('Employee2', 'Supervisor1');
insert into @Employees values ('Supervisor2', 'Manager1');
insert into @Employees values ('Employee3', 'Supervisor2');
insert into @Employees values ('Employee4', 'Supervisor2');

with Employees (MgrID, EmpID, [Rank], [Reports]) as
(
    select
      MgrID
    , EmpID
    , 0 'Rank'
    , cast(EmpID as nvarchar(max)) 'Reports'
    from @Employees
    where MgrID is null
    union all
    select
      e.MgrID 
    , e.EmpID
    , [Rank] + 1
    , [Reports] + '; ' + e.EmpID
    from @Employees e
    inner join Employees on Employees.EmpID = e.MgrID
)
select *
from Employees
where Reports like 'Manager1%'
order by [Rank];