获取所有的员工谁直接或间接地报告给员工,以层级没有(Get all employee who dir

2019-09-01 04:49发布

我有一个Employee表像

emp_id bigint,
reports_to bigint,
emp_name varchar(20),
Constraint [PK_Emp] Primary key (emp_id),
Constraint [FK_Emp] Foreign key (reports_to) references [MSS].[dbo].[Emp]([emp_id])

emp_id         reports_to        emp_name
------         ------       --------------
1              null         Sumanta
2              1            Arpita
3              null         Pradip
4              1            Sujon
5              2            Arpan
6              5            Jayanti

我想所有的员工直接或间接报告Sumanta或EMP_ID(1),并与层级,就像这样:

emp_id         hierarchy_level         emp_name
------         ---------------        ----------
2                    1                  Arpita
4                    1                  Sujon
5                    2                  Arpan
6                    3                 Jayanti

我是新来的SQL,只是找不到用什么或如何得到这些结果。 是否值得用表值变量,或者只是一个TSQL选择查询的存储过程就足够了。 任何帮助是值得欢迎的。

我所做的是 -

Select Ep.emp_id,ep.emp_eame 
From Emp as E 
Inner Join Emp as Ep on Ep.reports_to=E.Emp_id 
Where E.reports_to=1 or E.emp_id=1;

但是这是准确的高达2级,我甚至不能产生hierarchy_level没有。 任何建议,想法............将是最有益的.........

Answer 1:

你可以使用递归CTE:

; with  CTE as 
        (
        select  emp_id
        ,       reports_to
        ,       emp_name
        ,       1 as level
        from    Emp
        where   emp_name = 'Sumanta'
        union all
        select  child.emp_id
        ,       child.reports_to
        ,       child.emp_name
        ,       level + 1
        from    Emp child
        join    CTE parent
        on      child.reports_to = parent.emp_id
        )
select  *
from    CTE

例如在SQL小提琴。



文章来源: Get all employee who directly or indirectly reports to an employee, with hierarchy level no