Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / обход дерева в ADO / 10 сообщений из 10, страница 1 из 1
08.04.2008, 15:38
    #35242904
Snake_low
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обход дерева в ADO
По ряду причин вынужден использовать компонент ADO QUERY. А есть необходимость использовать обход дерева.
Данные в таблице хранятся в виде:

Имя | Уровень | Головной уровень
1 | 0 | null
2 | 1 | 1
3 | 0 | null
4 | 1 | 3
5 | 2 | 4

в другой таблице хранятся данные числовые связанные с нижними уровнями в дереве... вот как бы нужно собрать суммы из подчиненных в головные и вывести. в качестве входных данных на запрос любая строка ненулевого уровня... мне нужно вывести все подчиненные с суммами, и подчиненные подчиненных, т.е. берется верхушка, а мне нужны веточки =).

База под Оракл.. суммы я могу собрать и хранимой процедурой Pl\sql. А вот как дерево построить =(.

Простите за излишний треп.
...
Рейтинг: 0 / 0
08.04.2008, 15:49
    #35242949
Snake_low
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обход дерева в ADO
в принципе есть такой вариант:

select * from main_table a where a.1 = 1;

затем обрабатываю датасет и строю условие вида (2)

переписываю запрос из кода

select * from main_table a where a.1 = 1
union
select * from main_table a where a.1 in (2)

и так далее, единственно глубина вложений до 99, долго строится будет...
...
Рейтинг: 0 / 0
08.04.2008, 19:49
    #35243731
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обход дерева в ADO
обход вложенных структур делается влегкую через CTE, в мсдн даже пример есть как развернуть дерево из таблицы
...
Рейтинг: 0 / 0
09.04.2008, 11:10
    #35244702
Snake_low
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обход дерева в ADO
Кто такой СТЕ, я так не понимаю. Мне надо в построитель отчетов выбрать данные... желательно чтобы все было в одном датасете, его обсчитывать так удобнее... ФРС построена на ADO.net. Вот и попросил совета на форуме...
...
Рейтинг: 0 / 0
09.04.2008, 11:33
    #35244780
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обход дерева в ADO
Ваш вопрос не понятен людям... Где вы хотите "обходить" ваше деревце?
Это вопрос по PL/SQL ? Тогда вам на соотв форум....
Что такое имя? Что таое уровень? Что такое головной уровень?
...
Рейтинг: 0 / 0
09.04.2008, 13:42
    #35245303
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обход дерева в ADO
а, про базу не прочитал, CTE это для мс скуля. Для pl/sql есть другие методы, не помню название но точно есть :)
...
Рейтинг: 0 / 0
10.04.2008, 13:50
    #35248212
Snake_low
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обход дерева в ADO
buserВаш вопрос не понятен людям... Где вы хотите "обходить" ваше деревце?
Это вопрос по PL/SQL ? Тогда вам на соотв форум....
Что такое имя? Что таое уровень? Что такое головной уровень?

В запросе, я использую ADO.QUERY - компонент в построителе отчетов, чтобы с базы брать данные. Он автоматически формирует dataset - выбранные запросом строки.

Хочу получить набор строк, где будут ВСЕ подчиненные строчки, независимо от их уровня.

Имя в данном случае уникальный ключ. Т.е. это имя описываемого объекта, как пример из финансов - название бюджетной статьи.

Уровень. Продолжая пример Бюджет разбивается на статьи, подстатьи и т.д. Есть бюджет например завода, он разбивается на бюджеты отделов, они в свою очередь разбиваются на конкретные нужды... иначе говоря получается дерево. Если на заводе древовидная структура отделов... то и бюджет будет древовидным. Отдельные статьи затрат могут разбиваться дополнительно. Уровень здесь - считайте что идентификатор этой самой мелкости. 0 - бюджет завода, 1 - бюджет отдела, 2 - бригады например, 3 - конкретная статья... глубина естественно неизвестна... до 99 включительно.

Головной уровень - родитель этой ветки, например у меня есть статьи бюджета, плакатики - 3000р (4 ур), авторучки - 6000р (4 ур), все это включено в статью Рекламная Продукция (3ур) (сумма из подчиненных 9000р), которая включена в статью бюджет отдела маркетинга(2ур) (у которого может быть N подчиненных статей не только Рекламная Продукция), который входит в бюджет завода (0 ур)

шаг в единицу не обязателен. главное чтобы уровень подчиненного был меньше головного...

в в компоненте я могу использовать хранимые процедуры и функции Оракла, которые пишутся на Pl\sql сумму я могу посчитать для каждой строчки используя Pl.

в итоге указав в качестве входного параметра статью бюджет отдела маркетинга я должен получить


бюджет отдела маркетинга (сумма) (2ур)
рекламная продукция (9000р) (3ур)
плакатики (3000р) (4ур)
авторучки (6000р) (5ур)
(статья)
(статья)
...
(статья)

компонент ADO.QUERY - из FR3.
...
Рейтинг: 0 / 0
05.05.2008, 10:57
    #35293670
izekia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обход дерева в ADO
здесь пример для MS SQL, но логика похожая должна сработать, конкретно в статье рекурсия, без применения CTE
...
Рейтинг: 0 / 0
12.08.2008, 15:27
    #35483350
Snake_low
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обход дерева в ADO
Спасибо. Вопрос решен. =) заработало
...
Рейтинг: 0 / 0
12.08.2008, 15:42
    #35483384
Ъй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обход дерева в ADO
Snake_lowСпасибо. Вопрос решен. =) заработало
Вообще-то в оракле есть синтаксис select'а, который возвращает выборку согласно заданному ветвлению. См. в сторону select.. connect by.. prior.
Например, вот: http://www.ss64.com/ora/connectby.html
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / обход дерева в ADO / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]