Coba ini:
;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
Dengan Path
- baris yang diurutkan berdasarkan simpul orang tua
Jika Anda ingin mengurutkan simpul anak berdasarkan ItemType
untuk setiap level, daripada yang bisa Anda mainkan dengan Level
dan SUBSTRING
dari Path
kolom....
Di sini SQLFiddle dengan contoh data