我正在尝试通过自我加入解决以下问题
我有这样的桌子:
Employee Name ReportTo
--------------------------------
Bob Peter
Chris Tim
ABC DEF
Peter Null
EFG Peter
一个人下有很多员工,从上到下都有等级。从董事到雇用。我正在尝试创建报告以获取向他报告的所有员工。是在这里进行自我加入工作,还是有其他简便方法。我还有另一个条件,只有高层人员可以看到较低层。
预先感谢
答案 0 :(得分:0)
是的,可以使用self-join
with Employees ( EmployeeName, ReportTo ) as
(
select 'Bob','Peter' union all
select 'Chris','Tim' union all
select 'ABC','DEF' union all
select 'Peter',Null union all
select 'EFG','Peter'
)
select e1.ReportTo, e1.EmployeeName
from Employees e1
left join Employees e2 on e2.EmployeeName =e1.ReportTo
where e1.ReportTo is not null
order by e1.ReportTo;
ReportTo EmployeeName
--------- ------------
DEF ABC
Peter EFG
Peter Bob
Tim Chris