Sql 计算正在运行的总逻辑,但第一个单元格为空

Sql 计算正在运行的总逻辑,但第一个单元格为空,sql,oracle,window-functions,cumulative-sum,Sql,Oracle,Window Functions,Cumulative Sum,我需要为报告创建一个运行总数。我尝试过使用无界窗口函数,但我的第一个单元格是空白的。我在第一个单元格中也需要同样的逻辑。以下是我在表格中的初始金额。我用它来创建参考号的运行量,按降序排列 初始金额=995 逻辑: 结果: 预期结果: 您可以尝试添加isnull,0,我想这可能是个问题 InitialAmount - isnull(SUM (Amount) OVER(PARTITION BY ID Order By REFERENCE_NUMBER DESC ROWS BETWEEN UNBO

我需要为报告创建一个运行总数。我尝试过使用无界窗口函数,但我的第一个单元格是空白的。我在第一个单元格中也需要同样的逻辑。以下是我在表格中的初始金额。我用它来创建参考号的运行量,按降序排列

初始金额=995

逻辑:

结果:

预期结果:


您可以尝试添加isnull,0,我想这可能是个问题

InitialAmount - isnull(SUM (Amount)  OVER(PARTITION BY ID Order By REFERENCE_NUMBER 
DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ),0) AS RUNNING_AMOUNT

问题是第一行的窗口是空的,所以求和会产生null,这会传播到减法的结果

您可以使用coalesce解决此问题:


我通常在没有windowing子句的情况下将其写为:

(InitialAmount -
 (SUM(Amount)  OVER (PARTITION BY ID Order By REFERENCE_NUMBER DESC) - Amount
 )
) AS RUNNING_AMOUNT
也就是说,它只做一个包含当前行的常规累积和,然后减去当前值

InitialAmount 
    - COALESCE(
        SUM (Amount) OVER(
            PARTITION BY ID 
            Order By REFERENCE_NUMBER DESC 
            ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
        ),
        0
    ) AS RUNNING_AMOUNT
(InitialAmount -
 (SUM(Amount)  OVER (PARTITION BY ID Order By REFERENCE_NUMBER DESC) - Amount
 )
) AS RUNNING_AMOUNT