Oracle
 sql >> база данни >  >> RDS >> Oracle

Помощ за рекурсивна PL SQL заявка

Това е непроверен, приблизителен отговор (ако сте предоставили create table и insert изявления за вашите данни/структура, щях да го тествам). Предполага се, че няма разклонение във вашата таблица с транзакции (тоест, че link_trx_id е уникален). По принцип използваме рекурсивно присъединяване, за да получим групирането, родителската информация и реда, след което използваме аналитични функции, за да получим текуща обща сума (current_net ). Вместо да се опитваме да получим предишната обща сума (което бихме могли да направим), изглежда, че има повече смисъл просто да премахнем credit на текущия ред и debit от 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. таблица или изглед на oracle не съществуват от вътрешната съхранена процедура

  2. 3 начина за връщане на часовата зона от стойност на дата и час в Oracle

  3. Форматиране на данни с определен цвят

  4. Вземете последния идентификатор на вмъкнатия ред в Oracle DB

  5. Различни стойности се отчитат в една и съща колона