2012-02-04 32 views
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(按日期)...在第一次選擇然後ID <否第二選擇計算運行總數。

回答

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 

enter image description here

+0

THX。問題在於我在runtotal子查詢中使用了[Table_2]而不是cte。 – davor 2012-02-04 15:17:09

+1

我會提到'DATE'是一個保留字,如果它必須被使用,它應該被方括號包圍以區分列和關鍵字(例如,上面的'CONVERT'表達式對我來說很有趣)。 – 2012-02-04 16:54:12