2013-02-07 12 views
9

Sto lavorando in Oracle APEX e voglio aggiornare la colonna in un report con un nuovo valore nella seguente tabella. La Query report è mostrata nello schema seguente menzionato di seguito.UPDATING Table Column with new Entry

TABLE "VENDOR_ACCOUNT" 
( "VEN_ACCOUNTID"  NVARCHAR2(10), 
    "VEN_REGNO"   NVARCHAR2(10), 
    "VEN_TXDATE"   DATE, 
    "VEN_INVOICE_REFNO" NVARCHAR2(10), 
    "TOTALAMOUNT"  NVARCHAR2(10), 
    "IN"     NUMBER(10,0), 
    "OUT"    NUMBER(10,0) 
) 

SELECT "VEN_ACCOUNTID" , 
     "VEN_REGNO" , 
     "VEN_TXDATE" , 
     "VEN_INVOICE_REFNO" , 
     "TOTALAMOUNT" , 
     "IN", 
     "OUT", 
     "TOTALAMOUNT"+"IN" as "CREDIT", 
     "TOTALAMOUNT"-"OUT" as "DEBIT" 
FROM Vendor_Account; 

scenario richiesto: voglio aggiornare la TotalAmount Colonna con Debit e Credit. Il nuovo valore Debit o Credit deve essere visualizzato nella colonna TotalBalance nel record successivo. enter image description here

risposta

5

È possibile utilizzare la funzione di Oracle analyitic LAG:

Select "VEN_ACCOUNTID" , 
     "VEN_REGNO" , 
     "VEN_TXDATE" , 
     "VEN_INVOICE_REFNO" , 
     "TOTALAMOUNT" , 
     "TOTALAMOUNT" + lag("IN",1) over (ORDER BY "VEN_ACCOUNTID") 
         - lag("OUT",1) over (ORDER BY "VEN_ACCOUNTID") AS "NEW_TOTALAMOUNT", 
     "IN", 
     "OUT", 
     "TOTALAMOUNT"+"IN" as "CREDIT", 
     "TOTALAMOUNT"-"OUT" as "DEBIT" 
FROM Vendor_Account; 
+0

@alen .. E mi sta ancora dando la stessa risposta, come ho già detto che nello schema precedente .. nessun cambiamento sono stati fatti ! –

+0

Utilizzare la funzione LAG. Giocaci e guarda cosa fa. Mentre scrivevo la query, dovresti ottenere una nuova colonna "nuovo totale" nel rapporto APEX. –

+0

Ho fatto ... ma ancora non funziona –

5
Select 
    "VEN_ACCOUNTID" , 
    "VEN_REGNO" , 
    "VEN_TXDATE" , 
    "VEN_INVOICE_REFNO" , 
    "TOTALAMOUNT" AS "OLD_TOTALAMOUNT" 
    "TOTALAMOUNT" + nvl(lag (nvl("IN",0)-nvl("OUT",0)) 
          over (partition by "VEN_REGNO" order by "VEN_ACCOUNTID" 
          ) 
         ,0) AS "TOTALAMOUNT" 
    "IN", 
    "OUT", 
from Vendor_Account;