2011-03-03 3 views
5

현재 CTE 쿼리를 실행하여 대부분의 재귀 적 예제와 유사한 직원 테이블에서 직원 계층 구조를 재귀 적으로 작성합니다. 내가 갇혀있는 곳은 한 명의 직원을 쿼리하고 그 위에 계층 구조를 검색하려고하는 것입니다. 내가 끼 었어SQL CTE 재귀 : 상위 레코드 반환

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 

은 다음과 같습니다

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

다음 날 위에서 아래로 계층 구조를 표시 할 수 있습니다 SQL은 다음과 같습니다과 아래 내가 해결하려고 노력하고있는 테이블의 예입니다 가장 낮은 수준의 직원 인 Rob이나 Eric을 쿼리하고 Joe> John> Eric의 상위 계층 구조를 반환하는 방법을 알 수는 없습니다. 이것은 쉬운 일인 것처럼 보이지만 나는 내 삶을 위해 그것을 발견 할 수 없다.

답변

8

계층 구조의 깊이에 따라 가변 개수의 열을 반환하는 쿼리를 찾고 계십니까? 또는 한 필드의 연결된 문자열 일뿐입니다.

다음은 Eric과 그 위에있는 모든 사람을 계층 구조로 가져 오는 쿼리의 사소한 변경 사항입니다.

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

내 게시물에 표 예제를 사용하여 Eric을 쿼리하여 그의 레코드와 그 위에있는 두 사람의 레코드가 표시된 레코드 셋을 반환하고 싶습니다. 최종 목표는 모든 직원을 능란한 쿼리로 삼아 그 직원의 사슬을 맨 위에 표시하는 것입니다. – Tehrab

+0

나는 에릭과 그의 매니저를 줄 편집했다. –

+0

항상 간단한 것들. 답변으로 표시되었습니다. – Tehrab