sql >> Base de Datos >  >> RDS >> Oracle

ORACLE Connect by cláusula equivalente en SQL Server

El equivalente de SQL Server 2005+ de CONNECT BY de Oracle La sintaxis de consulta jerárquica es usar un CTE recursivo. SQL Server 2008 agregó HierarchyID. Aquí hay un ejemplo de un CTE recursivo:

WITH EmployeeHierarchy (EmployeeID, LastName, FirstName, ReportsTo, HierarchyLevel) AS (
   SELECT EmployeeID,
          LastName,
          FirstName,
          ReportsTo,
          1 as HierarchyLevel
     FROM Employees
    WHERE ReportsTo IS NULL
   UNION ALL
   -- Recursive step
   SELECT e.EmployeeID,
          e.LastName,
          e.FirstName,
          e.ReportsTo,
          eh.HierarchyLevel + 1 AS HierarchyLevel
     FROM Employees e
     JOIN EmployeeHierarchy eh ON e.ReportsTo = eh.EmployeeID)
  SELECT *
    FROM EmployeeHierarchy
ORDER BY HierarchyLevel, LastName, FirstName 

Buscar en Google "CTE jerárquico" y/o "CTE recursivo" arrojará numerosos resultados. Tomé la consulta de ejemplo de 4GuysFromRolla.com.

Los CTE recursivos ahora son el estándar ANSI:la sintaxis no se admitió hasta Oracle 11g, según tengo entendido.