在Manager层次结构的每个worker旁边列出Level 2 Manager

时间:2018-05-23 15:34:55

标签: sql oracle

Oracle数据库

让典型的一位经理接受许多直接下线报告

1级经理(顶级)
二级经理(向一级经理报告)
等级3-15等

有一个包含所有员工的表,并且在经理列中有直接经理

EID Name ManagerEID  
123  J    334  
321  E    555  
433  M    555  
223  N    233  
333  A    664  

我想要的是在视图中选择一个列或在另一列中具有Level 2管理器名称(或EID)的select语句

EID Name ManagerEID  Level2  
123  J    334  ManagerA  
321  E    555  ManagerB  
433  M    555  ManagerB  
223  N    233  ManagerA  
333  A    664  ManagerF  

2 个答案:

答案 0 :(得分:0)

要确认,您要在结果中查找单独的列,该列显示层次结构中级别2的经理的名称(或ID),对吗?

如果是这样,这将是实现这一目标的一种方式:

    select eid
          ,name
          ,managereid
          ,min(case when level = 2 then name end) over (partition by null) level_2_name
    from employee_temp
    connect by prior eid = managereid
    start with eid = <<top_level_manager_id>>

不是最优雅的解决方案 - 也许其他人有更好的想法。但它确实在每行的单独列中显示2级经理姓名,如果这是您正在寻找的内容。

答案 1 :(得分:0)

感谢所有回复,我实际上找到了使用connect_by_path

的解决方案
select EID,lpad(' ',level*3,' ')||full_name name,LEVEL
"Pathlen",connect_by_root full_name root, 
     sys_connect_by_path(full_name,'|') bosses 
from (select * from emptable where EID <> 'topmanagerEID' )h 
connect by prior EID = mgrEID
start with mgrEID = 'topmanagerEID'