SQLServer2005以降のOracleのCONNECT BY
に相当します 階層クエリ構文は、再帰CTEを使用することです。 SQLServer2008はHierarchyIDを追加しました。再帰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
「階層CTE」および/または「再帰CTE」をグーグルで検索すると、多数の結果が得られます。 4GuysFromRolla.comからサンプルクエリを取得しました。
再帰CTEはANSI標準になりました。私が理解しているように、構文はOracle11gまでサポートされていませんでした。