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
答案 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'