17,090
社区成员
发帖
与我相关
我的任务
分享
with t as(
select 2380 as c1,2000 as c2 from dual union all
select 2380 as c1,600 as c2 from dual union all
select 2380 as c1,600 as c2 from dual
)
select c1,c2,case when lag(c3)over(order by rn) is null then c3 else lag(c3)over(order by rn)||'-'||c2 end c4
from (select c1,c2,c1||'-'||c2 c3,rownum rn from t)
SQL> create table test(id int, num int, num2 int);
Table created
SQL> begin
2 insert into test values(1,2380,2000);
3 insert into test values(2,2380,600);
4 insert into test values(3,2380,600);
5 end;
6 /
PL/SQL procedure successfully completed
SQL> select id, num, num2, num - sum(num2) over(order by id) result from test ;
ID NUM NUM2 RESULT
---------- ---------- ---------- ----------
1 2380 2000 380
2 2380 600 -220
3 2380 600 -820
SQL> drop table test purge ;
Table dropped
SQL>