Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

CTE-Rekursion zum Abrufen der Baumhierarchie

Versuchen Sie Folgendes:

;WITH items AS (
    SELECT EstimateItemID, ItemType
    , 0 AS Level
    , CAST(EstimateItemID AS VARCHAR(255)) AS Path
    FROM EstimateItem 
    WHERE ParentEstimateItemID IS NULL AND EstimateID = @EstimateID

    UNION ALL

    SELECT i.EstimateItemID, i.ItemType
    , Level + 1
    , CAST(Path + '.' + CAST(i.EstimateItemID AS VARCHAR(255)) AS VARCHAR(255))
    FROM EstimateItem i
    INNER JOIN items itms ON itms.EstimateItemID = i.ParentEstimateItemID
)

SELECT * FROM items ORDER BY Path

Mit Path - Zeilen sortiert nach übergeordneten Knoten

Wenn Sie untergeordnete Knoten nach ItemType sortieren möchten für jedes Level, dann kannst du mit Level spielen und SUBSTRING von Path Spalte....

Hier SQLFiddle mit Beispieldaten