如何在SQL中为每两行执行列的垂直添加?

时间:2014-12-04 07:57:27

标签: sql oracle

我有一个名为ct_rt的表,并且有一个字段ct。该文件中的数据如下:

100
450
-20
500
300
-50

现在我希望得到以下结果:

100
550
530
1030
1330
1280

这是添加每一行及其后续行。那么我怎样才能获得所需的输出?我使用的是Oracle Database 12c企业版12.1.0.1.0版 - 64位生产版。请帮帮我。

谢谢。 :)

3 个答案:

答案 0 :(得分:4)

这可以使用具有"累积和":

的窗口函数来完成
select ct,
       sum(ct) over (order by some_column) as the_sum
from ct_rt
order by some_column;

提供一列来对结果进行排序。除非您指定order by,否则关系数据库中的行 已排序并基本上以随机顺序排列。累积金额具有相同的限制"因此,你必须在窗口函数的定义中提供order by

排序此结果的一个很好的候选者是一个时间戳列,用于定义何时插入(或更新)行。一个独特的,不断增加的id列也是一个很好的候选者。

答案 1 :(得分:0)

使用相关子查询的解决方案(您需要一个id字段)

SELECT (
    SELECT sum(ct) 
    FROM ct_rt AS sub
    WHERE sub.id <= qry.id
)
FROM ct_rt AS qry
ORDER BY qry.id

编辑: 这是一种替代解决方案。 a_horse_with_no_name的解决方案最有可能超越这个。

答案 2 :(得分:-2)

检查一下它可以帮助你

select numbers,SUM(numbers) over(order by rowid) nxtx
from txd;