表:tb_test
列:id、year、month、sort、value
其中value保存的是本年从1月到该月的累积数量
sort一共有12种,也就是说每月有12条记录现在要求写一个存储过程,以年份和月份为参数,返回12条记录,其中value值为当月数量(也就是该月的value-上月value)数据库方面比较菜,这个问题一直解决不了,各位大哥帮帮忙啊!谢谢了!
列:id、year、month、sort、value
其中value保存的是本年从1月到该月的累积数量
sort一共有12种,也就是说每月有12条记录现在要求写一个存储过程,以年份和月份为参数,返回12条记录,其中value值为当月数量(也就是该月的value-上月value)数据库方面比较菜,这个问题一直解决不了,各位大哥帮帮忙啊!谢谢了!
解决方案 »
- 分析tnsnames.ora文件失败, ServiceAliasException:11
- 谁用过0c4j?
- 请教10g中关于行移动的问题
- 关于alter session的问题,在线急等……
- 第一次写oracle存储过程,大家帮忙看看语法有什么问题。
- Asp.Net 连接Oracle数据库出现的错误请教
- 请教大家一个直接插入日期型数据的一个问题,可能很多人也一样迷惑这块!
- 如何将数据库中的存储过程导出成一个.sql文件?
- alter table map_tbl rename column recep_id to recp_id这个怎么不行啊
- 关于使用索引的疑惑!?!?!?!?!?!?!?!?
- 如何在过程中调用操作系统命令
- 部门经理想把运营,计费的数据库平台换成MYSQL,我需要充分的理由来否定!
select id,year,month,sort,value,value-nvl(lag(value,1) over (order by year,month),0)
from tb_test
v_id varchar2(20);
num number :=0;
v_year number;
v_month number;
v_value number;
v_value1 number;
v_sort number :=1;
v_b number := 1;
v_y number;
cursor cur is select t.id,t.year,t.month,t.value,t.sort from v_tb_test t order by t.sort,t.year,t.month;
begin
open cur;
loop
fetch cur into v_id,v_year,v_month,v_value,v_sort;
exit when cur%notfound;
if (v_sort = v_b) and (v_year = v_y) then
insert into v_tb_test1 values(v_id,v_year,v_month,v_sort,v_value-num);
commit;
num :=v_value;
else
insert into v_tb_test1 values(v_id,v_year,v_month,v_sort,v_value);
commit;
v_b := v_sort;
v_y := v_year;
num :=v_value;
end if;
end loop;
close cur;
exception when others then
dbms_output.put_line(sqlerrm);
rollback;
end;
不知道可不可以得分,
呵呵
感觉楼主说的功能还是基本能实现的