我需要以特定方式獲得樹的有序層次結構。所討論的表看起來有點像這樣(所有ID字段uniqueidentifiers,我已經簡化數據例如起見):CTE遞歸獲取樹層次結構
EstimateItemID EstimateID ParentEstimateItemID ItemType -------------- ---------- -------------------- -------- 1 A NULL product 2 A 1 product 3 A 2 service 4 A NULL product 5 A 4 product 6 A 5 service 7 A 1 service 8 A 4 product
樹結構的圖形視圖(*表示「服務」):
A ___/ \___ / \ 1 4 /\ /\ 2 7* 5 8 / / 3* 6*
使用此查詢,我可以得到層級(假裝「A」是唯一標識符,我知道這是不是在現實生活中):
DECLARE @EstimateID uniqueidentifier
SELECT @EstimateID = 'A'
;WITH temp as(
SELECT * FROM EstimateItem
WHERE EstimateID = @EstimateID
UNION ALL
SELECT ei.* FROM EstimateItem ei
INNER JOIN temp x ON ei.ParentEstimateItemID = x.EstimateItemID
)
SELECT * FROM temp
這給了我EstimateID的孩子'A',但是在它出現在表格中的順序。即:
EstimateItemID -------------- 1 2 3 4 5 6 7 8
不幸的是,我需要的是遵循以下限制的結果集的排序層次:
1. each branch must be grouped 2. records with ItemType 'product' and parent are the top node 3. records with ItemType 'product' and non-NULL parent grouped after top node 4. records with ItemType 'service' are bottom node of a branch
所以,爲了我需要的結果,在這個例子中,是:
EstimateItemID -------------- 1 2 3 7 4 5 8 6
我需要添加到我的查詢來完成此操作?
輝煌。這已經有幾年了,但今天發現它很有用。然而,原諒說,我發現在原來的帖子中提供的例子很難讓我轉化爲更常見的解決方案。所以,我使用更常見的數據,表格名稱和字段來重新發布您的(偉大的)想法,以便其他人更容易遵循。 – ptownbro
有沒有什麼辦法可以通過ItemType的級別0進行排序,並且層次結構應該保持原樣? –