SQL 获取经理及其主管的级别

SQL to get the levels for a manager and his supervisors

我有员工 table,其数据格式如下

Employee table

emplid      supervisor      employee_level 
------------------------------------------
   A            xyx                5 
   B            abc                5 
   xyz          def                6   
   abc          zzz                5
   zzz          xxx                6

employee_reports_to:

emplid         report_1   report2     report_3   reports_4
-----------------------------------------------------------
  A              yyy        xdc         def         xyz
  B                         xxx         zzz         abc

这是我需要的数据:

emplid        supervisor      level
-------------------------------------
  A             xyz             6
  B             zzz             6

谁能帮帮我?我需要找出每个员工的经理,然后找到每个经理级别,如果员工经理级别 5 然后选择他的老板,则只选择级别为 6 的经理。

谢谢

你需要多次加入 emp table(取决于层级)才能实现

with emp as
(
    select 'A' emplid     ,'xyx' supervisor      ,5 as employee_level  
   union select 'B','abc',5 
   union select 'xyz','def',6   
   union select 'abc','zzz',5
   union select 'zzz','xxx',6
)
,employee_reports_to as
(
select 'A' as emplid,'yyy' as report_1,'xdc' as report2,'def' as report_3,'xyz' as report_4
 union select  'B','','xxx','zzz','abc'
)
,levels as(
select r.*,er1.employee_level as r1_l 
,er2.employee_level as r2_l 
,er3.employee_level as r3_l 
,er4.employee_level as r4_l 
from employee_reports_to r
left join emp er1 on er1.emplid = r.report_1 
left join emp er2 on er2.emplid = r.report2
left join emp er3 on er3.emplid = r.report_3 
left join emp er4 on er4.emplid = r.report_4 
)
select emplid
,case when r1_l = 6 then report_1 
      when r2_l = 6 then report2
      when r3_l = 6 then report_3
      when r4_l = 6 then report_4
      else null end as level_6_manager
,6 as level
from levels

Result

Upvote if you find this answer useful