Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
CTE_NEWBI Member Откуда: Сообщений: 2 |
Добрый вечер! Подскажите, пожалуйста, как корректно написать обход дерева по таблице с id, parent_id чтобы в результате была конкатенация строки верхнего уровня (поел с названием), а за ней перечисление всех id, через точку. Т.е. если есть таблица http://screenshot.ru/upload/image/zIzh То как получить такой результат? http://screenshot.ru/upload/image/zIzP Спасибо! |
20 фев 17, 22:27 [20231019] Ответить | Цитировать Сообщить модератору |
iljy Member Откуда: Сообщений: 8711 |
CTE_NEWBI, пишете рекурсивное CTE, делаете обход дерева, при обходе накапливаете строку так, как вам надо. |
20 фев 17, 22:43 [20231053] Ответить | Цитировать Сообщить модератору |
X-Cite Member Откуда: Минск Сообщений: 1814 |
;with cte as ( select id, parentid, cast(id as nvarchar(max) as ttt) + N'.' from a where id = 1 union all select id, parentid, cte.ttt + cast(a.id as nvarchar(max)) from a join cte on cte.id = a.parentid ) select * from cte могу ошибаться, как-то так.. |
21 фев 17, 00:43 [20231271] Ответить | Цитировать Сообщить модератору |
CTE_NEWBI Member Откуда: Сообщений: 2 |
Спасибо за подсказку! В итоге получился вот такой рабочий запрос: ;with cte as ( select wbs_id, parent_wbs_id, cast(wbs_name as nvarchar(max)) + N'.' as ttt from PROJWBS where wbs_id = :wbs_id union all select PROJWBS.wbs_id, PROJWBS.parent_wbs_id, space (4) + cte.ttt + cast(PROJWBS.wbs_short_name as nvarchar(max)) +'.' from PROJWBS join cte on cte.wbs_id = PROJWBS.parent_wbs_id ) select * from cte |
21 фев 17, 11:35 [20232324] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |