Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
ArranHawk Member Откуда: Сообщений: 3 |
Есть лес деревьев, уровней пять-шесть. У каждого узла есть ссылка на его непосредственного родителя, в виде ParentId, у корней соответственно ParentId равен NULL. Также у каждого узла дерева есть поле с определенной информацией, скажем Type, которое не может быть равно NULL. Необходимо сделать выборку, в которой у каждого узла будет проставлен Id самого старшего узла-прародителя, у которого в поле Type стоит тоже значение, что и у данного узла-потомка. Данную задачу вообще возможно реализовать через рекурсивное CTE или надо искать другие пути? |
1 июн 15, 18:17 [17716937] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8300 |
Разумеется, можно, т.к. код родителя легко протянуть через всех потомков отдельным полем. |
1 июн 15, 18:28 [17716977] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
ArranHawk, тестовый набор данных напишите, чтобы можно было показать |
1 июн 15, 18:40 [17717013] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20959 |
При помощи CTE несложно получить выборку, в которую соберётся: узел его Type его родитель (не обязательно непосредственный) Type этого родителя Останется сделать отбор по равенству Type и, сгруппив по узлу, выбрать самого "верхнего" из родителей. |
1 июн 15, 18:55 [17717073] Ответить | Цитировать Сообщить модератору |
ArranHawk Member Откуда: Сообщений: 3 |
Таблица вида
Итоговая выборка такого вида
|
||||||||||||||||||||||||||||||||||||||||||
1 июн 15, 19:00 [17717091] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8300 |
ArranHawk, если хотите NULL, тогда левое объединение результата CTE с исходной таблицей по коду корня и типу корня. |
1 июн 15, 19:10 [17717113] Ответить | Цитировать Сообщить модератору |
ArranHawk Member Откуда: Сообщений: 3 |
Akina, огромное спасибо. |
1 июн 15, 19:32 [17717195] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |