CTE?

2009-02-25 18 views
13

Belirli bir kaydın tüm alt öğelerini hiyerarşik bir veri modelinde bulabilirim (aşağıdaki kod bölümüne bakın), ancak Ana/Çocuk zincirini belirli bir Çocuk Kimliği ile nasıl yedekleyeceğimi bilmiyorum. Bunu nasıl yapacağımı anlamak için kimse bana doğru yönde işaret edebilir mi? Linq to SQL de bu mümkün mü?CTE?

WITH TaskHierarchy (TaskID, [Subject], ParentID, HierarchyLevel, HierarchyPath) AS 
(
    -- Base case 
    SELECT 
     TaskID, 
     [Subject], 
     ParentID, 
     1 as HierarchyLevel, 
     CONVERT(VARCHAR(MAX),'/') AS HierarchyPath 
    FROM Task 
    WHERE TaskID = 2 

    UNION ALL 

    -- Recursive step 
    SELECT 
     t.TaskID, 
     t.Subject, 
     t.ParentID, 
     th.HierarchyLevel + 1 AS HierarchyLevel, 
     CONVERT(varchar(MAX),th.HierarchyPath + CONVERT(VARCHAR(32),t.ParentID) + '/') AS HierarchyPath 
    FROM Task t 
     INNER JOIN TaskHierarchy th ON 
     t.ParentID = th.TaskID 
) 

SELECT * 
FROM TaskHierarchy 
ORDER BY HierarchyLevel, [Subject] 

cevap

22

Ah, bunu anladım:

WITH Hierarchy(TaskID, [Subject], ParentID, IsProject, HLevel) 
AS 
(
    SELECT 
     TaskID, 
     [Subject], 
     ParentID , 
     IsProject, 
     0 as HLevel 
    FROM 
     Task 
    WHERE 
     TaskID = 59 

    UNION ALL 

    SELECT 
     SubDepartment.TaskID, 
     SubDepartment.[Subject], 
     SubDepartment.ParentID , 
     SubDepartment.IsProject, 
     HLevel + 1 
    FROM 
     Task SubDepartment 
    INNER JOIN 
     Hierarchy ParentDepartment 
    ON 
     SubDepartment.TaskID = ParentDepartment.ParentID 
) 

SELECT 
    TaskID, 
    [Subject], 
    ParentID, 
    IsProject, 
    HLevel 
FROM 
    Hierarchy 
ORDER BY 
    HLevel DESC 
+2

Teşekkür çözümünüzü yazabilmek için! Beni saatlerce kurtardı! –

İlgili konular