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

Pomoc dotycząca rekurencyjnych zapytań PL SQL

To jest nieprzetestowana, przybliżona odpowiedź (jeśli podałeś create table i insert oświadczenia dla twoich danych / struktury, przetestowałbym to). Zakłada, że ​​w Twojej tabeli transakcji nie ma rozgałęzień (to znaczy, że link_trx_id jest unikalny). Zasadniczo używamy łączenia rekurencyjnego, aby uzyskać grupowanie, informacje o rodzicach i kolejność, a następnie używamy funkcji analitycznych, aby uzyskać bieżącą sumę (current_net ). Zamiast próbować uzyskać poprzednią sumę (co możemy zrobić), bardziej sensowne wydaje się po prostu usunięcie credit bieżącego wiersza i debit z current_net .

SELECT trx_id,
       debit,
       credit,
       root_amt - cum_debit + cum_credit + debit - credit AS current_gross,
       root_amt - cum_debit + cum_credit AS current_net
FROM   (SELECT trx_id,
               debit,
               credit,
               SUM(credit) OVER (PARTITION BY event_id ORDER BY lvl) AS cum_credit,
               SUM(debit) OVER (PARTITION BY event_id ORDER BY lvl) AS cum_debit,
               root_amt
        FROM   (SELECT     trx_id,
                           debit,
                           credit,
                           LEVEL AS lvl,
                           CONNECT_BY_ROOT (gross_amount) AS root_amt,
                           CONNECT_BY_ROOT (event_id) AS event_id
                FROM       transaction t LEFT OUTER JOIN event e ON t.trx_id = e.transaction_id
                CONNECT BY link_trx_id = PRIOR trx_id
                START WITH link_trx_id IS NULL))


  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 określić opcjonalny warunek OUTER JOIN w Oracle 8i?

  2. Adnotacja Seam @Transactional nie działa?

  3. Metoda zbierania:procedura przycinania w bazie danych Oracle

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

  5. Jak wymienić ' lub dowolny znak specjalny w przypadku korzystania z XMLELEMENT Oracle