【问题标题】:Modify CTE to reference another field?修改 CTE 以引用另一个字段?
【发布时间】:2010-12-06 18:06:47
【问题描述】:

我有下面的 CTE 在递归员工表和构建传递给它的员工 ID 的扩展列表以及所有直接和间接报告方面运行良好。

我正在尝试让姐妹 CTE 使用用户名而不是员工 ID,但在进行更改后我没有收到任何数据...

这是我与 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  
)

【问题讨论】:

    标签: sql-server-2005 common-table-expression


    【解决方案1】:

    假设 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
      )
    

    【讨论】:

    • 我修正了这一行: WHERE NTID = ISNULL(@EmployeeNTID, EmployeeNTID) 所以是: WHERE NTID = ISNULL(@UserName, NTID) 因为employeeID和managerID之间的类似关系实际上是NTID和经理NTID。即使有了这个修复,我也会遇到语法错误。想法?
    • @kacalapy:语法错误在哪里??什么行,什么语句??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2015-01-17
    • 1970-01-01
    • 2023-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多