sql >> Databasteknik >  >> RDS >> Oracle

Rekursiv PL SQL Query Hjälp

Detta är ett oprövat, ungefärligt svar (om du hade tillhandahållit create table och insert uttalanden för din data/struktur, jag skulle ha testat det). Det förutsätter att det inte finns någon förgrening i din transaktionstabell (det vill säga att link_trx_id är unik). I grund och botten använder vi en rekursiv koppling för att få grupperingen, överordnad information och ordning, och sedan använder vi analytiska funktioner för att få en löpande summa (current_net ). Istället för att försöka få den föregående summan (vilket vi kunde göra), verkar det vara mer meningsfullt att helt enkelt ta bort den nuvarande radens credit och debit från 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. Hur man ändrar kolumnstorlek för en vy i Oracle

  2. SQL gå med hjälp för vänlistan

  3. Kan inte använda objekt av typen PDOStatement som array

  4. PostGIS, är möjligt att skapa en polygon från vissa punkter