Oracle
 sql >> Base de données >  >> RDS >> Oracle

ORACLE Connect by clause équivalente dans SQL Server

L'équivalent SQL Server 2005+ de CONNECT BY d'Oracle syntaxe de requête hiérarchique consiste à utiliser un CTE récursif. SQL Server 2008 a ajouté HierarchyID. Voici un exemple de CTE récursif :

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 

Googler "CTE hiérarchique" et/ou "CTE récursif" donnera de nombreux résultats. J'ai pris l'exemple de requête de 4GuysFromRolla.com.

Les CTE récursifs sont désormais la norme ANSI - la syntaxe n'était pas prise en charge avant Oracle 11g, si j'ai bien compris.