Форум: "Базы";
Текущий архив: 2012.04.22;
Скачать: [xml.tar.bz2];
ВнизПомогите составить запрос... Найти похожие ветки
← →
Phoenix © (2010-05-25 14:39) [0]Доброго времени суток камрады.
Есть некая таблица в Oracle
TMP_PODRAZD
(ID NUMBER not null,
ID_PARENT NUMBER not null,
NAME VARCHAR2(200))
в которой хранится иерархическая структура неких данных. К этой таблице имеется слудующее задание
"Построить запрос отображающий дерево подразделений, со всеми подчиненными узлами начиная с заданного идентификатора (id). Для каждого подразделения отобразить кол-во подчиненных подразделений. "
И если с первой частью проблем не возникает
select a.id, a.id_parent,a.name
from tmp_podrazd a
START WITH a.id =(id элемента подчинённую структуру которого, хотим посмотреть)
CONNECT BY PRIOR a.id = a.id_parent
order by a.id
То вот с второй половиной вопроса проблема - никак не могу сообразить, как посчитать количество подчинённых элементов для каждого элемента иерархии. Очень прошу помощи.
← →
Sergey13 © (2010-05-25 14:52) [1]Можно попробовать вложенным запросом.
select a.id, a.id_parent,a.name, (select count()
from tmp_podrazd a
START WITH a.id =(id элемента подчинённую структуру которого, хотим посмотреть)
CONNECT BY PRIOR a.id = a.id_parent
) as count_rec
from tmp_podrazd a
START WITH a.id =(id элемента подчинённую структуру которого, хотим посмотреть)
CONNECT BY PRIOR a.id = a.id_parent
order by a.id
Но тормоза практически обеспечены. 8-)
← →
Phoenix © (2010-05-25 14:58) [2]
> Можно попробовать вложенным запросом.
Всё бы хорошо но так мы подсчитаем количество вложенностей для ОДНОГО элемента с id которого мы начинаем. А нужно ,если я правильно понял, суммы и для нижних элементов иерархии.
← →
Sergey13 © (2010-05-25 15:15) [3]> [2] Phoenix © (25.05.10 14:58)
А попробовать не судьба?
← →
Phoenix © (2010-05-25 15:20) [4]
> А попробовать не судьба?
Судьба, потому и говорю что попробовал.
← →
Медвежонок Пятачок © (2010-05-25 15:38) [5]То вот с второй половиной вопроса проблема - никак не могу сообразить, как посчитать количество подчинённых элементов для каждого элемента иерархии. Очень прошу помощи.
каунт по id где parentid = id обрабатываемой записи
← →
Sergey13 © (2010-05-25 15:51) [6]> [4] Phoenix © (25.05.10 15:20)
START в подзапросе надо переделать - я посто скопировал текст.
← →
Phoenix © (2010-05-25 16:00) [7]
> START в подзапросе надо переделать - я посто скопировал
> текст.
Каким образом не подскажете? Я тут день над запросом бьюсь ничего придумать не могу
← →
Sergey13 © (2010-05-25 16:25) [8]> [7] Phoenix © (25.05.10 16:00)
Как то такselect a.id, a.id_parent,a.name, (select count()
from tmp_podrazd b
START WITH b.id =a.id
CONNECT BY PRIOR b.id = b.id_parent
) as count_rec
from tmp_podrazd a
START WITH a.id =(id элемента подчинённую структуру которого, хотим посмотреть)
CONNECT BY PRIOR a.id = a.id_parent
order by a.id
← →
Phoenix © (2010-05-25 16:30) [9]
> Sergey13
Огромное спасибо. Не знал что можно в подзапрос передавать параметры с общего запроса. Ещё раз спасибо - очень помогли!
← →
Кщд © (2010-05-26 08:52) [10]
with q as
(
select level lvl, e.*
from tmp_podrazd e
start with e.id = (id ýëåìåíòà ïîä÷èí¸ííóþ ñòðóêòóðó êîòîðîãî, õîòèì ïîñìîòðåòü)
connect by prior e.id = e.boss
),
h as (
select k.root_id, k.root_lvl, k.root_id_parent, k.root_name, count(1) - 1
from
(
select connect_by_root q.id root_id,
connect_by_root q.id_parent root_id_parent,
connect_by_root q.name root_name,
connect_by_root q.lvl root_lvl
from q q
connect by prior q.id = q.id_parent
) k
group by k.root_id, k.root_lvl, k.root_id_parent, k.root_name
)
select h.*
from h h
← →
Кщд © (2010-05-26 08:53) [11]прошу прощения:
with q as
(
select level lvl, e.*
from tmp_podrazd e
start with e.id = (id элемента подчинённую структуру которого, хотим посмотреть)
connect by prior e.id = e.boss
),
h as (
select k.root_id, k.root_lvl, k.root_id_parent, k.root_name, count(1) - 1
from
(
select connect_by_root q.id root_id,
connect_by_root q.id_parent root_id_parent,
connect_by_root q.name root_name,
connect_by_root q.lvl root_lvl
from q q
connect by prior q.id = q.id_parent
) k
group by k.root_id, k.root_lvl, k.root_id_parent, k.root_name
)
select h.*
from h h
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2012.04.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c