Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak pobrać wszystkie rekurencyjne dzieci wiersza nadrzędnego w Oracle SQL?

Jesteś blisko:

select connect_by_root parent_id base, parent_id, child_id, qty
from md_boms
connect by prior child_id = parent_id
order by base, parent_id, child_id;

          BASE  PARENT_ID   CHILD_ID        QTY
    ---------- ---------- ---------- ----------
            25         25         26          1 
            25         25         27          2 
            25         26         28          1 
            25         26         29          1 
            25         26         30          2 
            25         27         31          1 
            25         27         32          1 
            25         27         33          2 
            26         26         28          1 
            26         26         29          1 
            26         26         30          2 
            27         27         31          1 
            27         27         32          1 
            27         27         33          2 

     14 rows selected 

connect_by_root operator daje podstawowy parent_id .

Skrzypce SQL .

Nie jestem pewien, jak obliczasz swoją qty . Domyślam się, że chcesz całkowitą drogę do dziecka, ale to nie pasuje do tego, co pokazałeś. Zatem na początek pożyczanie bardzo mocno z tej odpowiedzi , możesz spróbować czegoś takiego:

with hierarchy as (
  select connect_by_root parent_id base, parent_id, child_id, qty,
    sys_connect_by_path(child_id, '/') as path
  from md_boms
  connect by prior child_id = parent_id
)
select h.base, h.parent_id, h.child_id, sum(e.qty)
from hierarchy h
join hierarchy e on h.path like e.path ||'%'
group by h.base, h.parent_id, h.child_id
order by h.base, h.parent_id, h.child_id;

     BASE  PARENT_ID   CHILD_ID SUM(E.QTY)
---------- ---------- ---------- ----------
        25         25         26          1 
        25         25         27          2 
        25         26         28          2 
        25         26         29          2 
        25         26         30          3 
        25         27         31          3 
        25         27         32          3 
        25         27         33          4 
        26         26         28          1 
        26         26         29          1 
        26         26         30          2 
        27         27         31          1 
        27         27         32          1 
        27         27         33          2 

 14 rows selected 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać powiązaną grupę elementów w Oracle SQL

  2. SQL Query do konwersji wyrażenia cron na format daty/czasu

  3. Problem TO_DATE z funkcją Oracle DBMS_SQL.EXECUTE

  4. Oracle LIMIT i ograniczenie 1000 kolumn

  5. podając poprawną nazwę użytkownika i hasło, pobierz ORA-01017:nieprawidłowa nazwa użytkownika/hasło; Logowanie odrzucone