gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:13:16 25 4
gpt4 key购买 nike

我有一个员工表,例如

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

Example at SQL Fiddle.

关于sql - 获取直接或间接向员工汇报的所有员工,层次结构级别为否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16232426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com