2013-07-23 177 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