如何汇总每个项目的所有行?

时间:2018-08-01 02:14:10

标签: sql oracle

关于我之前的问题How to use the result of previous row in oracle?

我需要对每个项目的值求和。

Col | Col A | Col B
Item1  1     |   1     (col A)
Item1  2     |   3     (colA + prevColB)
Item1  3     |   6     (colA + prevColB)
Item2  1     |   1     (colA)
Item2  4     |   5     (colA + prevColB)
Item2  3     |   8     (colA + prevColB)

3 个答案:

答案 0 :(得分:3)

SQL表表示无序集。您的累加总和假设表格的顺序,这在问题中不明显。

累积总和的语法为:

select t.*
       sum(cola) over (partition by col order by ?) as colb
from t;

?用于表示行顺序的列(或表达式)。

答案 1 :(得分:0)

col是我的东西,你可以尝试下面的

select col, sum(col A), sum( col B) from tb group by col

享受吧

答案 2 :(得分:0)

如果您的意思是仅前一个行的值(而不是总和),则使用lag函数,该函数给出前一行的列的值,如以下 SQL

  select colA, colA+ 
     lag(colA,1,0) over (partition by Col order by Col ) as ColB
    from tab;

  COLA  COLB
    1     1
    2     3
    3     5
    1     1
    4     5
    3     7

SQL Fiddle Demo