我有一张桌子:
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
我需要输出
所以输出应该是:
700
1000
800
700
600
我需要通过SQL查询输出,而不是过程或其他东西。
答案 0 :(得分:3)
您需要Lead
函数,它将显示第一行的第二行,依此类推。将其命名为nxt_score
。然后,您可以添加score
和nxt_score
来获取输出。对于最后一行,您还需要nvl
,nxt_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。