SQL Server 2005+-motsvarigheten till Oracles CONNECT BY
hierarkisk frågesyntax är att använda en rekursiv CTE. SQL Server 2008 lade till HierarchyID. Här är ett exempel på en rekursiv 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
Att googla på "hierarkisk CTE" och/eller "rekursiv CTE" kommer att visa många resultat. Jag tog exempelfrågan från 4GuysFromRolla.com.
Rekursiva CTE:er är nu ANSI-standard - syntaxen stöddes inte förrän Oracle 11g som jag förstår.