Изменить CTE для ссылки на другое поле? - PullRequest
1 голос
/ 06 декабря 2010

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

Я пытаюсь заставить сестру CTE использовать имя пользователя вместо идентификатора сотрудника, но я не получаю никаких данных после внесения изменений ...

Вот мой рабочий код с employeeID, как мне заставить его работать с NTID (сотрудник) и managerNTID (менеджер)

CREATE FUNCTION fnGetEmployeeHierarchy   
(    
  @EmployeeId int = null  
)  
RETURNS TABLE   
AS  
RETURN   
(  
  WITH yourcte AS  
  (  
    SELECT EmployeeId, ManagerID, NTID, FullName--, Name  
    FROM Employees  
    WHERE EmployeeId = isnull(@EmployeeId,EmployeeId)  
    UNION ALL  
    SELECT e.EmployeeId, e.ManagerID, e.NTID, e.FullName--, e.Name  
    FROM Employees e  
    JOIN yourcte y ON e.ManagerID = y.EmployeeId  
  )  
SELECT EmployeeId, ManagerID, NTID, FullName--, Name  
FROM yourcte  
)

1 Ответ

0 голосов
/ 06 декабря 2010

Предполагая, что managerNTID ссылается на столбец NTID менеджера - попробуйте это:

CREATE FUNCTION fnGetEmployeeHierarchyNew(@EmployeeNTID int = null)  
RETURNS TABLE   
AS  
  RETURN   
  (  
    WITH NewCTE AS  
    (  
      SELECT EmployeeId, ManagerID, NTID, FullName--, Name  
      FROM Employees  
      WHERE NTID = ISNULL(@EmployeeNTID, EmployeeNTID)  

      UNION ALL  

      SELECT e.EmployeeId, e.ManagerID, e.NTID, e.FullName--, e.Name  
      FROM Employees e  
      JOIN NewCTE y ON e.ManagerNTID = y.NTID  
    )  
    SELECT EmployeeId, ManagerID, NTID, FullName--, Name  
    FROM NewCTE
  )
...