2013-06-28 4 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