23.07.2014, 10:32 | #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 Есть идеи ? |
|
23.07.2014, 12:29 | #2 |
Участник
|
В каком виде вам нужно получить результат? Вам его нужно отобразить на форме или просто обойти в цикле?
|
|
23.07.2014, 12:33 | #3 |
Участник
|
|
|
23.07.2014, 12:41 | #4 |
Участник
|
Тогда все равно сначала обход дерева в цикле (можно рекурсивно)
Заполняйте временную таблицу и уже её выводите на форму. P.S.: Если такие операции с деревом необходимо выполнять часто, то лучше изменить структуру данных добавив как минимум номер строки, при помощи которого можно будет без рекурсии вычислить "границы" любого парента. |
|
23.07.2014, 12:53 | #5 |
Участник
|
погугли Дерево каталогов NESTED SETS. по мне так самый удачный вариант реализации дерева
|
|
23.07.2014, 12:59 | #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). |
23.07.2014, 14:33 | #7 |
Участник
|
ошибка: Функция не была объявлена.
Или это я должен создать метод addToResultSet, в котором будет происходит раскрытие дерева ? А как мне выполнить фильтрацию по уровню(Level) , как я делаю выше в запросе mssql? Последний раз редактировалось userax2009; 23.07.2014 в 14:46. |
|
23.07.2014, 14:47 | #8 |
Участник
|
Цитата:
Да так же как и фильтрацию по SEGMENTID. |
|
24.07.2014, 16:10 | #9 |
Участник
|
спасибо, все получилось
|
|