2010-02-04 14 views

cevap

8

Oracle'ın CONNECT BY hiyerarşik sorgu sözdiziminin SQL Server 2005+ eşdeğeri, yinelemeli CTE kullanmaktır. SQL Server 2008, HierarchyID ekledi. sayısız sonuçlarını dönecek "hiyerarşik CTE" ve/veya "özyinelemeli CTE" Googling

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 

: İşte bir bir CTE özyinelemeli örnek. Örnek sorguyu 4GuysFromRolla.com'dan aldım.

Yinelemeli CTE'ler artık ANSI standardıdır - sözdizimi, Oracle 11g anladığım kadar desteklenmemiştir.

+0

Bağlantılar ve örnek için thx. – zapping

1

MS SQL Server 2008'de hayatınızı kolaylaştıracak HierarchyID veri türü var.

+0

+1 erken kuş için :) – zapping

İlgili konular