Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 иерархичные запросы  [new]
tshemyakina
Member

Откуда:
Сообщений: 3
WITH stat
     AS (SELECT 111 res_id, 1 res_in_id FROM DUAL
         UNION ALL
         SELECT 111 res_id, 2 res_in_id FROM DUAL
         UNION ALL
         SELECT 112 res_id, 3 res_in_id FROM DUAL
         UNION ALL
         SELECT 112 res_id, 4 res_in_id FROM DUAL
         UNION ALL
         SELECT 115 res_id, 5 res_in_id FROM DUAL
         UNION ALL
         SELECT 115 res_id, 111 res_in_id FROM DUAL)
         
    SELECT LPAD ('*', LEVEL) AS l,
           LEVEL,
           CONNECT_BY_ISLEAF AS in_pkg_ind,
           res_id,
           CONNECT_BY_ROOT res_in_id AS res_in_id,
           SYS_CONNECT_BY_PATH (res_in_id, '/')
      FROM stat
CONNECT BY PRIOR res_id = res_in_id
  ORDER BY res_id


Подскажите, как правильно написать след ограничение: Сейчас запрос выдает 8 строк , нужно 7
Для res_id 115 - нужны 3 строки с res_in_id с 1,2,5 .
3 дек 14, 17:08    [16944945]     Ответить | Цитировать Сообщить модератору
 Re: иерархичные запросы  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
tshemyakina,

Правило по которому ты исключаешь предлагается угадать остальным?
Ну можешь, например добавить, чтоб это выражение было равно 1.
rank() over (partition by res_id, res_in_id order by level desc)
3 дек 14, 17:46    [16945234]     Ответить | Цитировать Сообщить модератору
 Re: иерархичные запросы  [new]
tshemyakina
Member

Откуда:
Сообщений: 3
на вход - таблица, с 2-мя столбцами: res_id - номер пакета , res_in_id - номер ресурса, который входит в пакет. (пакет тоже является ресурсом)
На выходе нужна таблица - с 2-мя столбцами: res_id - номер пакета , res_in_id - номер ресурса, который входит в пакет , но в случае, когда в пакет (115) входит другой пакет (111) - нужно отобразить номер финального пакета и самый низкий уровень ресурсов, которые входят в него (или в пакеты, входящие в него) .
Т е в моем примере : пакет 111 - состоит из 2-х ресурсов 1 и 2 .
Пакет 115 - состоит из 2-х ресурсов: пакета 111 и ресурса 5.
Тогда для пакета 115 нужно получить 3 строки (состоит из 3-х ресурсов : 1 ,2 ,5 )
3 дек 14, 18:11    [16945416]     Ответить | Цитировать Сообщить модератору
 Re: иерархичные запросы  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
tshemyakina,

В таком случае перепутано условие построяния иерархии.
select * from
(
    SELECT connect_by_root res_id root,
           res_in_id,
           connect_by_isleaf as leaf
      FROM stat t
CONNECT BY res_id = prior res_in_id
)
where leaf = 1
order by root, res_in_id
3 дек 14, 18:25    [16945512]     Ответить | Цитировать Сообщить модератору
 Re: иерархичные запросы  [new]
stax..
Guest
dbms_photoshop
tshemyakina,

Правило по которому ты исключаешь предлагается угадать остальным?
Ну можешь, например добавить, чтоб это выражение было равно 1.
rank() over (partition by res_id, res_in_id order by level desc)

я так понимаю надо исключить тех у кого есть дети

.....
stax
3 дек 14, 18:34    [16945565]     Ответить | Цитировать Сообщить модератору
 Re: иерархичные запросы  [new]
tshemyakina
Member

Откуда:
Сообщений: 3
спасибо
3 дек 14, 18:34    [16945570]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить