2011-03-03 19 views
5

Aktualnie używam kwerendy CTE do rekurencyjnego budowania hierarchii pracowników z tabeli pracowników, podobnie jak pokazuje to większość przykładów rekursywnych. Gdzie utknąłem, to to, że próbuję zapytać o jednego pracownika i odzyskać hierarchię nad nim. Poniżej jest przykład tabeli próbuję pracować z:Rekurencja CTE SQL: Powracanie rekordów rodzica

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

Poniżej znajduje się SQL, który umożliwia mi wyświetlić hierarchię od góry do dołu:

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 

Gdzie jestem zakleszczony jest że nie mogę wymyślić, w jaki sposób zapytać o pracownika najniższego szczebla, Roba lub Erica, i zwrócić hierarchię nad nim z Joe> John> Eric. Wydaje się, że to powinno być łatwe, ale nie mogę tego dostrzec dla mojego życia.

Odpowiedz

8

Szukasz zapytania, aby zwrócić zmienną liczbę kolumn, w zależności od głębokości hierarchii? Lub po prostu połączony ciąg w jednym polu?

Oto drobna zmiana w zapytaniu, które spowoduje, że Eric i każdy nad nim w hierarchii.

+0

Posługując się przykładem tabeli w moim poście, chciałbym zapytać o Erica i zwrócić zestaw rekordów z trzema rekordami pokazującymi jego rekord i dwie osoby nad nim. Ostatecznym celem jest sprawdzenie każdego pracownika i zobaczenie łańcucha dowodzenia tego pracownika aż po samą górę. – Tehrab

+0

Edytowałem, żeby dać ci Erica i jego menedżerów. –

+0

Zawsze proste rzeczy. Oznaczono jako odpowiedź. – Tehrab