这种情况能用SQL实现吗

[复制链接]
查看11 | 回复4 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
金额 累积金额
1 1000 0
2
0
3 20000
4 5000
update 后:
金额 累积金额
1 1000 1000
2
1000
3 20003000
4 5003500

能用UPDATE把'金额'一栏逐行累加并且赋给'累积金额'一栏吗,或者还有其他的办法?
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
考虑到MYSQL没有分析函数,所以在ORACLE下用过程解决,参考该一下就好了
SQL> select * from temp;
ID JE LJJE
---------- ---------- ----------
1 1000
0
2
0
3 2000
0
4500
0
SQL> create or replace procedure pro_update_ljje
2as
3l_num integer;
4begin
5select max(id) into l_num from temp;
6for i in 1..l_numloop
7update temp set ljje=(select sum(nvl(je,0)) from temp where idselect * from temp;
ID JE LJJE
---------- ---------- ----------
1 1000
0
2
0
3 2000
0
4500
0
SQL> exec pro_update_ljje();
PL/SQL 过程已成功完成。
SQL>select * from temp;
ID JE LJJE
---------- ---------- ----------
1 1000 1000
2
1000
3 2000 3000
4500 3500
SQL>
[ 本帖最后由 zeromyth 于 2009-9-26 21:17 编辑 ]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
zeromyth同学


回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
原帖由 WESTLIFE_XU 于 2009-10-12 11:32 发表
zeromyth同学


这样还麻烦,如果是ORACLE
直接用一个decode加lag()函数就能搞定
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
update temp a set ljje = ( select sum(NULLIF(je,0)) from temp b where b.id=t2.id group by t1.id) temp2
set temp.ljje = temp2.ljje
where temp.id = temp2.id;
可能性能并不好。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行