![]() |
#1 |
Участник
|
рекурсия
Подскажите пожалуйста, как данный запрос в MsSQL переписать на Х++. Использую СТЕ для раскрытия дерева, нахожу нужный мне уровень и вывожу отфильтрованные данные в итоговом запросе.
Цитата:
;WITH countrySegmentation
AS (SELECT TreeNodeId ,NAME ,PARENTTreeNodeId ,DATAAREAID ,0 Level FROM dbo.MULTILEVELSEGMENTTREE_ZTR UNION ALL SELECT t.TreeNodeId ,t.NAME ,t.PARENTTreeNodeId ,t.DATAAREAID ,Level+1 FROM countrySegmentation c JOIN dbo.MULTILEVELSEGMENTTREE_ZTR t ON c.TreeNodeId = t.PARENTTreeNodeId) select distinct mt.TREENODEID, mt.PARENTTREENODEID, mt.NAME, Level from MULTILEVELSEGMENTDATA_ZTR md join MULTILEVELSEGMENTTREE_ZTR mt on md.SEGMENTID = mt.SEGMENTID join countrySegmentation on mt.TREENODEID = countrySegmentation.TREENODEID where mt.SEGMENTID = 'География' and Level > 1 order by NAME Есть идеи ? |
|
![]() |
#2 |
Участник
|
В каком виде вам нужно получить результат? Вам его нужно отобразить на форме или просто обойти в цикле?
|
|
![]() |
#3 |
Участник
|
|
|
![]() |
#4 |
Участник
|
Тогда все равно сначала обход дерева в цикле (можно рекурсивно)
![]() Заполняйте временную таблицу и уже её выводите на форму. P.S.: Если такие операции с деревом необходимо выполнять часто, то лучше изменить структуру данных добавив как минимум номер строки, при помощи которого можно будет без рекурсии вычислить "границы" любого парента. |
|
![]() |
#5 |
Участник
|
погугли Дерево каталогов NESTED SETS. по мне так самый удачный вариант реализации дерева
|
|
![]() |
#6 |
Участник
|
На всякий случай, если вопрос был в том как именно можно обойти дерево
X++: void dfs(int _parent) { MULTILEVELSEGMENTTREE_ZTR mt while select mt where mt.PARENTTreeNodeId == _parent { if (mt.SEGMENTID == 'География') { addToResultSet(mt); } dfs(mt.TreeNodeId) } } |
|
|
За это сообщение автора поблагодарили: userax2009 (1). |
![]() |
#7 |
Участник
|
ошибка: Функция не была объявлена.
Или это я должен создать метод addToResultSet, в котором будет происходит раскрытие дерева ? А как мне выполнить фильтрацию по уровню(Level) , как я делаю выше в запросе mssql? Последний раз редактировалось userax2009; 23.07.2014 в 14:46. |
|
![]() |
#8 |
Участник
|
Цитата:
Да так же как и фильтрацию по SEGMENTID. |
|
![]() |
#9 |
Участник
|
спасибо, все получилось
|
|
|
![]() |
||||
Тема | Ответов | |||
рекурсия макроса | 7 | |||
Рекурсия, память | 10 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|