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.