Предполагая, что у меня есть эта таблица: (c
является дочерним от родительского p
)
c p
------
40 0
2 3
2 40
3 1
7 2
1 0
Где (0
означает root) - я хочу, чтобы порядок выбора отображался как:
c b
------
1 0
3 1
2 3
40 0
2 40
7 2
Потому что у нас есть 2 корня (1,40) и 1 <40.
Итак, мы начинаем с 1
а затем отображаем под ним - все это потомки.
Тогда мы доберемся до 40
. опять та же логика.
Вопрос:
Как мне это сделать?
Мне удалось отобразить его рекурсивно + поиск уровня иерархии * (хотя я не уверен, что это поможет) *
WITH cte(c, p) AS (
SELECT 40, 0 UNION ALL
SELECT 2,3 UNION ALL
SELECT 2,40 UNION ALL
SELECT 3,1 UNION ALL
SELECT 7,2 UNION ALL
SELECT 1,0
) , cte2 AS(
SELECT c,
p,
PLevel = 1
FROM cte
WHERE p = 0
UNION ALL
SELECT cte.c,
cte.p,
PLevel = cte2.PLevel + 1
FROM cte
INNER JOIN cte2
ON cte2.c = cte.p
)
SELECT *
FROM cte2