2010-02-04 17 views

Respuesta

8

El equivalente SQL Server 2005+ de la sintaxis de consulta jerárquica CONNECT BY de Oracle es usar un CTE recursivo. SQL Server 2008 agregó HierarchyID. He aquí un ejemplo de una CTE recursiva:

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 

googlear "jerárquica CTE" y/o "CTE recursiva" a su vez por numerosos resultados. Tomé la consulta de ejemplo del 4GuysFromRolla.com.

Los CTE recursivos ahora son estándares ANSI: la sintaxis no era compatible hasta Oracle 11g, según tengo entendido.

+0

thx para los enlaces y la muestra. – zapping

1

Hay HierarchyID tipo de datos en MS SQL Server 2008, que pueden hacer su vida más fácil.

+0

+1 para la madrugada :) – zapping

Cuestiones relacionadas