1

我的表中有以下数据:

id   invoice_id   date         ammount
1    1            2012-01-01    100.00
20   1            2012-01-31     50.00
470  1            2012-01-15    300.00

现在,我需要计算某个时期内发票的运行总计。因此,此数据样本的输出应如下所示:

id   invoice_id   date         ammount  running_total
1    1            2012-01-01    100.00         100.00
470  1            2012-01-15    300.00         400.00
20   1            2012-01-31     50.00         450.00

我尝试了这个样本http://www.sqlusa.com/bestpractices/runningtotal/和其他几个,但问题是我可以有像 id 20,日期 2012-01-31 和 id 120,日期 2012-01 这样的条目-01,然后我不能在第一次选择中使用 NO = ROW_NUMBER(over by date)... ,然后在第二次选择中使用 ID < NO 来计算运行总计。

4

1 回答 1

0
DECLARE @DateStart DATE='2012-01-01'; 

WITH cte 
     AS (SELECT id = Row_number() OVER(ORDER BY [date]), 
                DATE, 
                myid = id, 
                invoice_id, 
                orderdate = CONVERT(DATE, DATE), 
                ammount 
         FROM   [Table_2] 
         WHERE  DATE >= @DateStart) 
SELECT myid, 
       invoice_id, 
       DATE, 
       ammount, 
       runningtotal = (SELECT SUM(ammount) 
                       FROM   cte 
                       WHERE  id <= a.id) 
FROM   cte AS a 
ORDER  BY id 

在此处输入图像描述

于 2012-02-04T14:54:14.410 回答