我有一个脚本,我正试图计算一组交易的运行余额:
所以这里的关键字段是期初余额。这将是报告运行时的余额。因此,查询中的每个“AccountId”的值都是相同的。
总价值是已发生的交易的价值。 (无列名称)是一个行号,它在结果集中找到的每个新帐户后重置 -
ROW_NUMBER()OVER(PARTITION BY AccountId ORDER BY PostingDate)
我当时正在做的是在余额字段中我想做以下事情。
当行号= 1时,它将使用期初余额并添加到总价值。如你所见,我做得很好。
然而,我正在努力实现的是每一个后续行,我如何计算它下面一行的余额。
因此,在上面的示例中,第一行显示余额为125.80。 我希望第二行是226.98。所以没有行号为1的所有行的余额+总值。
答案 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。