Oracle
 sql >> Database >  >> RDS >> Oracle

ORACLE Connect by clausola equivalente in SQL Server

L'equivalente SQL Server 2005+ di CONNECT BY di Oracle la sintassi della query gerarchica consiste nell'utilizzare un CTE ricorsivo. SQL Server 2008 ha aggiunto HierarchyID. Ecco un esempio di CTE ricorsivo:

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 

Cercare su Google "CTE gerarchico" e/o "CTE ricorsivo" darà numerosi risultati. Ho preso la query di esempio da 4GuysFromRolla.com.

I CTE ricorsivi ora sono standard ANSI:la sintassi non era supportata fino a Oracle 11g da quanto ho capito.