2011-03-03 2 views
5

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

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 

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

ответ

8

Вы ищете запрос для возврата переменного количества столбцов в зависимости от глубины иерархии? Или просто конкатенированная строка в одном поле?

Вот незначительные изменения в вашем запросе, которые приведут Эрика и всех, кто находится выше его в иерархии.

WITH employeeMaster 
     AS (SELECT p.EmployeeID , 
        p.MgrID , 
        p.NAME 
      FROM  Employees p 
      WHERE p.NAME = 'Eric' 
      UNION ALL 
      SELECT c.EmployeeID , 
        c.MgrID , 
        c.NAME 
      FROM  employeeMaster cte 
        INNER JOIN Employees c ON c.EmployeeID = cte.MgrID 
     ) 
SELECT * 
FROM employeeMaster m 
+0

Использование примера таблицы в моем сообщении, я хотел бы запросить у Эрика и вернуть набор записей с тремя записями, в которых показаны его записи и два человека над ним. Конечная цель - быть отвратительным запросом любого сотрудника и видеть цепочку команд сотрудника вплоть до вершины. – Tehrab

+0

Я редактировал, чтобы дать вам Эрика и его менеджеров. –

+0

Всегда простые вещи. Отмечено, как ответили. – Tehrab

Смежные вопросы