Список менеджера уровня 2 рядом с каждым работником для иерархии менеджера - PullRequest
0 голосов
/ 23 мая 2018

Oracle Database

Типичный менеджер для множества прямых отчетов по линии

Менеджер 1-го уровня (верхний уровень)
Менеджеры 2-го уровня (которые подчиняются менеджеру 1-го уровня)
Уровни 3-15 и т. Д.

Имеет одну таблицу, которая содержит всех сотрудников и имеет прямой менеджер в столбце менеджера

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

Я хочу, чтобы столбец был в представлении илиоператор выбора с именем менеджера уровня 2 (или EID) в другом столбце

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 голосов
/ 24 мая 2018

Спасибо всем за ответы, я действительно нашел решение, используя 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' 
0 голосов
/ 23 мая 2018

Для подтверждения вы ищете отдельный столбец в результате, который показывает имя (или ID) менеджера на уровне 2 в вашей иерархии, верно?

Если это так, это будет одинспособ получить это:

    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 в отдельном столбце в каждой строке, если это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...