2016-11-10 61 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;