2009-02-25 14 views
13

मैं एक पदानुक्रमित डेटा मॉडल में दिए गए रिकॉर्ड के सभी बच्चों को पा सकता हूं (नीचे कोड देखें) लेकिन मुझे यकीन नहीं है कि किसी दिए गए चाइल्ड आईडी के साथ माता-पिता/बाल श्रृंखला का बैक अप कैसे लें। क्या कोई मुझे यह समझने के लिए सही दिशा में इंगित कर सकता है कि यह कैसे करें? क्या यह लिंक से एसक्यूएल में भी संभव है?सीटीई एक पदानुक्रम का बैक अप लेने के लिए?

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] 

उत्तर

22

आह, मैं यह पता लगा: अपने समाधान पोस्ट करने के लिए

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

धन्यवाद! यह मुझे घंटे बचा लिया है! –