Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (3)

Лучшие ответы пользователя

Все ответы (1)
  • Как создать рекурсивный запрос SQL Oracle?

    @PetrGudym
    Добрый день, elijah eliasum!

    Вы все правильно двигаетесь, только в обратную сторону, начиная с листьев.
    Воспользуйтесь системными полями sys_connect_by_path, sys_connect_by_root
    и после аналитическими функциями Оракла sum() over(), row_number() over()

    примерно так:

    select *
      from (
           select sum(quantity) over (partition by path_) quantity,
                  row_number() over (partition by path_) rn
    	          --,h.*, p.*, r.*
            from (
                  SELECT cid, par_cid, rname, 
                         sys_connect_by_path(cid,'/') path_,
    	                 sys_connect_by_root(cid)     product_cid
                    FROM catalog
                   START WITH cid in (
    		            -- возможно есть способ определить листья 
    			        -- без использования дополнительного вызова 
    		           select distinct rcid from products
    		           ) 
                  CONNECT BY PRIOR par_cid = cid
           ) h 
           join products p on (h.product_cid = p.rcid)
           join records r ...
        )
    where rn = 1
    Ответ написан
    Комментировать