@mletov

Как сортировать Cte в рамках ветки?

Пожалуйста, подскажите

Есть таблица с достаточно типовой распространенной структурой: id, parent, sort, name
Примерно такой

1|Категория_1 | Индекс сортировки 1 | ИдРодителя 0
2|----Категория_1.1 | Индекс сортировки 1 | ИдРодителя 1
3|----Категория_1.2 | Индекс сортировки 2 | ИдРодителя 1
4|----Категория_1.3 | Индекс сортировки 3 | ИдРодителя 1

5|Категория_2 | Индекс сортировки 2 | Родитель 0
6|----Категория_2.1 | Индекс сортировки 1 | ИдРодителя 5
7|----Категория_2.2 | Индекс сортировки 2 | ИдРодителя 5
8|----Категория_2.3 | Индекс сортировки 3 | ИдРодителя 5

9|--------Категория_2.3.1 | Индекс сортировки 1 | ИдРодителя 8
10|--------Категория_2.3.2 | Индекс сортировки 2 | ИдРодителя 8

11|----Категория_2.4 | Индекс сортировки 4| ИдРодителя 5

Делаю вывод всего дерева при помощи cte.
Нужно отсортировать выборку по полю sort в рамках каждой ветки.

Какие варианты дали гуглинг и Stack Overflow:

1) Предлагают сделать вес сортировки не в рамках ветки, а сквозным, а потом склеивать в одну строку и по получившемуся полю сортировать. Не очень красивое решение.
2) Отказаться от cte и написать хранимку для получения одной ветки, подавать на вход ид для получения потомков и вызывать ее рекурсивно
3) Рекурсивно склеивать ид и сортировать по результату конкатенации
4) Ну еще написал решение через CASE WHEN, но оно костыльное, т к ограничивает кол-во уровней и потомков для каждой ветки.

М б кто-нибудь знает красивое решение сортировки именно для cte?
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы