当前位置: 首页 > 面试题库 >

获取所有直接或间接向员工报告的员工,层次结构级别为

锺离马鲁
2023-03-14
问题内容

我有一个员工表

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。任何建议,想法............将是最有帮助的............


问题答案:

您可以使用递归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 Fiddle中的示例。



 类似资料:
  • 问题内容: 我有一个任务有问题。 我需要计算直接或间接向特定经理报告的所有下属(与众不同) 我有一个这样的表: 例子: 我只能算直接向经理汇报的员工: 但是结果是我有这样的事情: 反而: 如果有任何建议或想法,我将很高兴。 问题答案:

  • 问题内容: 我有课: 然后创建对象: 尝试获取所有字段后,我打电话 但是我只有一个数组 如何从所有类的所有字段包括扩展? 问题答案: 请尝试以下操作:

  • 假设Employee_Info表中有三名员工: 我必须编写一个select sql查询,输出如下: 正如您所看到的,新的一行应该包含某个特定雇员的所有工资的总和。

  • 问题内容: 我在这方面遇到了困难。我已经看到了一些示例,这些示例说明了如何从给定父级的自引用表中获取所有子级记录,甚至如何获取子级记录的父级。 我想做的是返回一条记录,并给所有子记录指定ID。 为了说明这一点-我有一个公司层次结构。在哪里: 我需要的是一个过程(1)弄清记录的级别,以及(2)检索该记录和所有子记录。 作为区域的想法可以看到一个区域中的所有地区和代表,而地区可以看到他们的代表。代表只

  • 问题内容: 我正在写一个查询,以查找收入高于其部门平均工资的员工。我需要显示员工ID,薪水,部门ID和该部门的平均工资。 我有一个几乎可以正常使用的查询,但它一直显示“ ORA-00904:“ AVG_SAL”:无效标识符”错误。我正确地做到了吗?为什么会出现此无效的标识符错误? 问题答案: 我不相信您可以在WHERE子句中引用列别名(在这种情况下为avg_sal)。 您需要重复该内部查询,即:

  • 如果我有这样一门课: 获取节点的所有父层次结构的最简单/最优雅的方法是什么? 类似于: