Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORACLE Connect by-Klauseläquivalent in SQL Server

Das SQL Server 2005+-Äquivalent von Oracles CONNECT BY Die hierarchische Abfragesyntax besteht darin, einen rekursiven CTE zu verwenden. SQL Server 2008 hat HierarchieID hinzugefügt. Hier ist ein Beispiel für einen rekursiven CTE:

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 

Wenn Sie nach „hierarchischem CTE“ und/oder „rekursivem CTE“ googeln, werden zahlreiche Ergebnisse angezeigt. Ich habe die Beispielabfrage von 4GuysFromRolla.com genommen.

Rekursive CTEs sind jetzt ANSI-Standard - die Syntax wurde meines Wissens bis Oracle 11g nicht unterstützt.