【问题标题】:UPDATING Table Column with new Entry使用新条目更新表列
【发布时间】:2013-01-22 18:40:09
【问题描述】:

我在 Oracle APEX 中工作,我想用下表中的新值更新报表中的列。报告查询如下图所示。

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;

必需的场景:我想用DebitCredit 更新TotalAmount 列。新的DebitCredit 值必须显示在下一条记录的TotalBalance 列中。

【问题讨论】:

    标签: sql oracle oracle-apex


    【解决方案1】:

    可以使用Oracle解析函数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;
    

    【讨论】:

    • @alen.. 它仍然给我与我在上图中提到的相同的答案.. 没有进行任何更改!
    • 使用 LAG 功能。玩弄它,看看它做了什么。在我编写查询时,您应该会在 APEX 报告中获得一个新列“新总计”。
    • @MuhammadUsman 那么究竟是什么不起作用?当我从您的问题中获取您的结果集并对其运行 Alen 或 Florin 的查询时,它给了我您的要求:totalamount + in of previous record - out of previous record。那么是您的报告“不起作用”还是查询不完整?如果是,那么您的问题没有提供足够的细节。
    • 问题是您希望以后更新表格吗?如果是这样,单独的 Alens 查询不会这样做 - 它只会返回每次运行所需的值。您需要修改查询(例如将其与更新结合)以使更改生效
    • @Tom .. 这是问题“ORA-00923:FROM 关键字未在预期位置找到”。我试图解决这个查询,但仍然无法正常工作..您可以轻松理解问题..用图表很好地解释了这个问题。如果在借方或贷方列中进行了一些更改,我想更新总金额列应该在下一个条目中更新。谢谢你
    【解决方案2】:
    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 2015-07-19
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多