2016-11-10 54 views
0

我有一个脚本,我试图找出一组交易的运行平衡:TSQL - 运行总

image1

所以这里的重点领域是期初余额。这将是报告运行时的平衡。因此,查询中每个“AccountId”的值都是相同的。

总价值是发生的交易的价值。 的(没有列名)是行号,每个新账号后重置它发现在结果集 -

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

什么我然后做在余额字段我要做到以下几点。

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

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

所以在上面的例子中,第一行显示了125.80的余额。 我想第二排是226.98。因此,资产负债+总价值不具备的1

+0

您使用的是哪个版本的SQL Server? –

回答

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

5

行号在SQL Server 2012+的所有行,你可以这样做:

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