2010-02-04 28 views

回答

8

Oracle的CONNECT BY分層查詢語法的SQL Server 2005+等價物是使用遞歸CTE。 SQL Server 2008增加了HierarchyID。下面是一個遞歸CTE的例子:谷歌搜索「分層CTE」和/或「遞歸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 

。我採用了4GuysFromRolla.com的示例查詢。

遞歸CTE現在是ANSI標準 - 直到Oracle 11g才支持該語法,據我瞭解。

+0

thx爲鏈接和樣本。 – zapping 2010-02-05 05:43:21

1

在MS SQL Server 2008中有HierarchyID數據類型,它可以使您的生活更輕鬆。

+0

+1爲早起的鳥:) – zapping 2010-02-05 05:43:50