Рекурсия SQL CTE: возврат родительских записей

В настоящее время я выполняю запрос CTE для рекурсивного построения иерархии сотрудников из таблицы сотрудников, аналогичной тому, что демонстрируют большинство рекурсивных примеров. Я застрял в том, что пытаюсь запросить одного сотрудника и получить иерархию над ним. Ниже приведен пример таблицы, с которой я пытаюсь работать:

Employees
===========================================================================
EmployeeID    MgrID    Name
1             null     Joe
2             1        John
3             2        Rob
4             2        Eric

Следующий код SQL позволяет мне отображать иерархию сверху вниз:

with employeeMaster as (
    select p.EmployeeID, p.MgrID, p.Name
    from Employees p
    where p.MgrID is null

    union all

    select c.EmployeeID, c.MgrID, c.Name
    from employeeMaster cte inner join Employees c on c.MgrID = cte.EmployeeID
)
select * from employeeMaster

Я застрял в том, что я не могу понять, как запросить сотрудника самого низкого уровня, Роба или Эрика, и вернуть иерархию над ним из Джо> Джон> Эрик. Кажется, это должно быть легко, но я не могу этого заметить.

5
задан Tehrab 3 March 2011 в 22:54
поделиться