2013-01-22 37 views
0

我正在嘗試獲取正在運行的小計(瞭解這一點與小組的小計以及彙總方法不同)。爲SQL Server創建運行小計

使用

Row_Number() over (order by ID_Number) as Row_Count 

,並在SELECT語句中築巢,並使用上本身LEFT OUTER JOIN(這只是攪動)審理。

什麼,我試圖讓這個是:

if ROW_COUNT > 1 THEN RUNNINGTOTAL = Volume_Category + (RUNNINGTOTAL for ID_Number where ROW_COUNT= ROW_COUNT(for this ID_Number*)-1) 

我有一個表的唯一「身份證號碼」,這是這裏的重點名單。

+0

你能提供簡單的數據和結果? –

+0

你使用的是什麼版本的sql server? – Taryn

+0

關於此問題有幾個問題,通常標記爲累計和。我喜歡臨時變量的答案,像這樣:http://stackoverflow.com/a/7631964/931379。它們通常比巧妙使用'sum'函數快得多。 – Pursuit

回答

1

除非您使用SQL Server 2012,否則執行累計總和的最簡單方法是使用相關子查詢。下面是代碼模板:

select t.*, 
     (select sum(val) from t t2 where t2.ordercol <= t.ordercol) as cumesum 
from t 

在2012年,你可以這樣做:

select t.*, 
     sum(val) over (order by ordercol) as cumesum 
from t 

在這兩個,val是要總結和ordercol是如何指定排序的列。

+0

@bluefeet。 。 。大聲笑,我想你之前已經提出過這個建議。我會學習嗎? –

+0

我不明白什麼是第二個查詢! –

+0

@HamletHakobyan它適用於SQL Server 2012! – Lamak

0

試試這個:

SELECT 
    T1.Id, 
    SUM(T2.Amount) Total 
FROM tbl T1 
    JOIN Tbl T2 
     ON T1.Id>= T2.Id 
GROUP BY T1.Id