【问题标题】:TSQL - running totalTSQL - 运行总计
【发布时间】:2016-11-10 20:19:26
【问题描述】:

我有一个脚本,我正在尝试计算一组交易的运行余额:

所以这里的关键字段是期初余额。这将是报告运行时的余额。因此查询中每个“AccountId”的值都是相同的。

总价值是已发生交易的价值。 (No column name) 是在结果集中找到每个新帐户后重置的行号 -

ROW_NUMBER()OVER(PARTITION BY AccountId ORDER BY PostingDate)

然后我正在做的是在 Balance 字段中我想要执行以下操作。

当行号 = 1 时,它将使用期初余额并添加到总值中。如您所见,我做得很好。

但是,我正在努力实现的是对于随后的每一行,我如何计算其下一行的余额。

所以在上面的示例中,第一行显示余额为 125.80。 我希望第二行是 226.98。因此,所有行数不为 1 的行的余额 + 总值。

【问题讨论】:

  • 您使用的是什么版本的 SQL Server?

标签: sql sql-server tsql


【解决方案1】:

在 SQL Server 2012+ 中,您可以:

select (OpeningBalance +
        sum(TotalValue) over (partition by AccountId order by PostingDate)
       ) as Balance
from t;

【讨论】:

    【解决方案2】:
    Select Balance = OpeningBalance + 
            Sum(TotalValue) Over (Partition By AccountId
                                  Order By PostingDate
                                  Rows Between Unbounded Preceding And Current Row)
    
      From t;
    

    Rows Between 将总和限制在排序顺序中此行之前的行,否则总和将包括分区中的所有行。

    Rows Between 在这种情况下是不必要的。

    更多关于window functions

    【讨论】:

      猜你喜欢
      • 2012-06-20
      • 2014-07-13
      • 1970-01-01
      • 2017-10-04
      • 2012-07-03
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多