相关疑难解决方法(0)

SQL Server CTE和递归示例

我从不使用递归的CTE.我刚刚读了一篇关于它的文章.本文在Sql server CTE和递归的帮助下显示员工信息.它基本上显示了员工及其经理信息.我无法理解此查询的工作原理.这是查询:

WITH
  cteReports (EmpID, FirstName, LastName, MgrID, EmpLevel)
  AS
  (
    SELECT EmployeeID, FirstName, LastName, ManagerID, 1
    FROM Employees
    WHERE ManagerID IS NULL
    UNION ALL
    SELECT e.EmployeeID, e.FirstName, e.LastName, e.ManagerID,
      r.EmpLevel + 1
    FROM Employees e
      INNER JOIN cteReports r
        ON e.ManagerID = r.EmpID
  )
SELECT
  FirstName + ' ' + LastName AS FullName,
  EmpLevel,
  (SELECT FirstName + ' ' + LastName FROM Employees
    WHERE EmployeeID = cteReports.MgrID) AS Manager
FROM cteReports
ORDER BY EmpLevel, MgrID
Run Code Online (Sandbox Code Playgroud)

这里我发布有关输出如何显示的信息: 在此输入图像描述

我只需要知道它是如何首先显示管理器然后是循环中的下属.我想第一个sql语句只触发一次,并返回所有员工ID.

第二个查询重复触发,查询当前管理员ID所在的员工所在的数据库. …

sql-server common-table-expression

102
推荐指数
3
解决办法
17万
查看次数