2016-10-18 2 views
3

現在の行に前の行の値を追加しようとしており、合計に達するまでこれを保持しています。SQL Server 2008の累積加算

私は以下のクエリを試してみました。自分のニーズに応じて行番号を設定しました。追加は同じ方法で行う必要があります。

select * 
from #Finalle 
order by rownum ; 

出力:

Type     Count_DB Rownum 
------------------------------------------ 
Within 30 days   399480  1 
Within 60 days   30536  2 
Within 90 days   10432  3 
Within 120 days   11777  4 
Greater than 120 days 13091  5 
Blank     29297  6 
Total     494613  7 

私は以下のクエリをしようとすると、それは6行目までは正常に動作しますが、最後の行の失敗:

select 
    f1.[type], 
    (select 
     Sum(f.[Count of ED_DB_category]) as [Cummumative] 
    from 
     #Finalle f 
    where 
     f1.rownum >= f.rownum) 
from 
    #Finalle f1 
order by 
    rownum 

出力:

Type     No column name 
-------------------------------------- 
Within 30 days   399480 
Within 60 days   430016 
Within 90 days   440448 
Within 120 days  452225 
Greater than 120 days 465316 
Blank     494613 <---Add only until here 
Total     989226 

合計は、saを返す必要があります私の価値は最初の表のとおりです。

どうすればよいですか?

+0

データアナリストの観点から見ると、「120日以上」は累積的ではないe ... – JohnHC

答えて

2

.... はここSWAGだが、私はあなたのテーブル構造のことを確認していません。 ....または何を注文するか

SELECT 
    f1.[type], 
    SUM(f.[Count of ED_DB_category]) OVER(ORDER BY f1.[type] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Cummumative] 
FROM 
FROM #Finalle f1 
WHERE f.Type <> 'Total' 
+1

ohgod !!それはとてもばかげていた、ありがとう:)それは動作します。 – Ruchi

3

これを試してください:あなたはたぶん、あなたは、ウィンドウ関数を使用することができ、この

select f1.[type], 
     (select Sum(f.[Count of ED_DB_category]) 
       from #Finalle f where f1.rownum >= f.rownum AND 
       f.Type <> 'Total' 
     )as [Cummumative] 
from #Finalle f1 
order by rownum 
+0

これも機能します:)時間と助けてくれてありがとう! – Ruchi

0

を探して

select f1.[type], 
     CASE 
      WHEN type = 'Total' THEN f1.[Count_DB] 
      ELSE SUM(f1.[Count_DB]) OVER (ORDER BY rownum) 
     END  
from #Finalle f1 
order by rownum