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 を 2 番目の選択で実行合計を計算するために使用できませんでした。

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 に答える