2013-07-23 222 views
0

我需要開發一個SQL查詢,執行以下操作:總和 - SQL查詢

 Column A  Column B 

Row1 2861682  sum(Row1 to Row5) 
Row2 2522226  sum(Row2 to Row5) 
Row3 2285983  sum(Row3 to Row5) 
Row4 2096046  sum(Row4 to Row5) 
Row5 1935355  sum(Row5) 

這是我在表列中的數據。

現在我需要計算

sum(Row1 to Row5) 
sum(Row2 to Row5) 
sum(Row3 to Row5) 
sum(Row4 to Row5) 
sum(Row5) 

感謝

+4

什麼DB引擎您使用的? –

+0

netezza ...謝謝 – Gallop

回答

3

此標準的SQL形式使用相關子查詢:

select t.*, 
     (select sum(B) 
     from t t2 
     where t2.A >= t.A 
     ) as TheSum 
from t; 

有些數據庫還支持窗口/分析功能,使累計款項。

編輯:

Netezza公司是支持使用窗口函數累加和數據庫之一(由於其Postgres的遺產,我想象)。你也可以使用這個爲:

select t.*, 
     sum(B) over (order by A desc) as TheSum 
from t 

編輯II:

我沒有Netezza公司的數據庫進行測試,但它確實有RowId列。你也許可以使用它,儘管我找不到任何可以保證單調遞增的文檔。事實上,我很確定,對於並行加載,rowid將而不是單調分配。

查詢看起來像:

select t.*, 
     sum(B) over (order by rowid desc) as TheSum 
from t 
+0

你能解釋一下t和B代表什麼。 B列基於總和 – Gallop

+0

@Moonwalk表示。 。 。 't'代表你的餐桌。 'A'是第一列(似乎包含值'row1'等)。 'B'是第二列,似乎包含您想要求和的值。 SQL表本質上是無序的(特別是在像Netezza這樣的並行數據庫系統上)。如果您沒有訂單標識符(例如ID或創建日期),那麼累計總和就沒有意義了。 –

+0

嗨戈登-B是新的列。我只有A列的數據。僅計算B列值。 – Gallop