获取一行中连续行的总和

时间:2017-04-21 03:41:58

标签: sql oracle oracle11g

我有一张桌子:

Emp_id  Emp_Name    Department     Score
123     Raju            D1          300
124     Ravi            D2          400
125     Annie           D3          600
126     Ajay            D4          200
127     Amey            D5          500
128     Akil            D6          100

我需要输出

  • 第1行中第1行和第2行的得分总和
  • 第2行的第2行和第3行的得分总和,

所以输出应该是:

700
1000
800
700
600

我需要通过SQL查询输出,而不是过程或其他东西。

2 个答案:

答案 0 :(得分:3)

您需要Lead函数,它将显示第一行的第二行,依此类推。将其命名为nxt_score。然后,您可以添加scorenxt_score来获取输出。对于最后一行,您还需要nvlnxt_score将为空。因此,在这种情况下,它会使用0添加分数。

如果需要,请从select子句中删除其他列。

SELECT
  t1.*,
  score + nvl(nxt_score, 0) AS cum_score
FROM 
    (SELECT
      t.*,
      LEAD(score, 1) OVER (ORDER BY emp_id) AS nxt_score
    FROM table1 t
    ) t1

答案 1 :(得分:3)

使用从当前行到下一行(ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING)的滑动窗口的分析函数很容易做到这一点:

SELECT Emp_id, Emp_Name, Department, Score, sum(Score)
  OVER (ORDER BY Emp_id ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) sum
FROM score;

对数据执行此查询时,结果如下:

123 Raju    D1  300 700
124 Ravi    D2  400 1000
125 Annie   D3  600 800
126 Ajay    D4  200 700
127 Amey    D5  500 600
128 Akil    D6  100 100

有关详细信息,请参阅Database SQL Language Reference, Analytic Functions