TSQL - 运行总计

时间:2016-11-10 11:49:51

标签: sql sql-server tsql

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

image1

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

总价值是已发生的交易的价值。 (无列名称)是一个行号,它在结果集中找到的每个新帐户后重置 -

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

我当时正在做的是在余额字段中我想做以下事情。

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

然而,我正在努力实现的是每一个后续行,我如何计算它下面一行的余额。

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

2 个答案:

答案 0 :(得分:5)

在SQL Server 2012+中,您可以执行以下操作:

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

答案 1 :(得分: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