2013-06-28 416 views
0

我有一個分層表看起來像這樣:層次表查詢

id child_id 
1 2 
2 3 
2 4 
3 5 
3 6 
3 7 
4 8 
4 9 
4 10 

如何編寫一個查詢來獲得這樣的格式結果:

1 
|_ 2 
    |_ 3 
    | |_ 5 
    | |_ 6 
    | |_ 7 
    |_ 4 
     |_ 8 
     |_ 9 
     |_ 10 
+1

你能告訴我們你的嘗試嗎?或解釋你嘗試過的邏輯? –

+1

在客戶端而不是服務器端做所有格式化的東西。 –

+0

@RaduGheorghiu我還沒有嘗試階段,因爲我只是不知道如何解決這個問題。 – Wytas

回答

1

這是最好的,我可以這樣做:

WITH cte AS (
SELECT id, CAST(NULL AS INT) as Parent, 1 AS Level, CAST(id AS varchar(255)) AS LevelChar FROM Hier WHERE id = 1 
UNION ALL 
SELECT child_id AS id, hier.id AS Parent, Level + 1, CAST(LevelChar + '-' + CAST(child_id AS varchar(255)) AS varchar(255)) FROM Hier 
JOIN cte ON Hier.id = cte.id 
) 
SELECT ISNULL(REPLICATE(Space(2) + '|',Level-1),'') + CAST(id AS Varchar(255)) FROM cte 
ORDER BY LevelChar, ID 
+0

這正是我所需要的 – Wytas