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.