oracle存储过程for循环相减

代码:FOR V IN (SELECT TR_DATE,PAY_CARD_COUNT,PHASE_NUMBER,PERCENTAGE_OF FROM M_TATTENDANCEDATA) LOOP

END LOOP;

表数据:
rownun TR_DATE PAY_CARD_COUNT PHASE_NUMBER PERCENTAGE_OF
23 20120930 300004 0
24 20120929 300004 0
25 20120928 300004 0
26 20120927 300004 0
27 20120926 300004 0
28 20120925 300004 4
29 20120924 300004 0
30 20120923 300004 0
31 20120922 300004 0
32 20120921 300004 9
33 20120920 300004 13
34 20120919 300004 0
35 20120918 300004 0
36 20120917 300004 0
37 20120916 300004 0
38 20120915 300004 0
39 20120914 300004 0
40 20120913 300004 0
41 20120912 300004 0
42 20120911 300004 0
43 20120910 300004 0
44 20120909 300004 0
45 20120908 300004 0
46 20120907 300004 0
47 20120906 300004 0
48 20120905 300004 0
49 20120904 300004 0
50 20120903 300004 0
51 20120902 300004 0
52 20120901 300004 0

相关说明:
TR_DATE 日期、PAY_CARD_COUNT 刷卡数、PHASE_NUMBER 相差数、PERCENTAGE_OF相差百分比
相差数:后一天的刷卡数 - 减去前一天的刷卡数
百分比:(后一天的刷卡数 - 减去前一天的刷卡数)/ 减去前一天的刷卡数 (保留两位小数,求百分比)
问:怎么完善上面的代码呢?
20120902 号的 PHASE_NUMBER = 20120902号的刷卡数-20120901 号的刷卡数
20120902 号的PERCENTAGE_OF= (20120902 号的刷卡数-20120901 号的刷卡数)/20120901 号的刷卡数

20120903 号的 PHASE_NUMBER = 20120903号的刷卡数-20120902 号的刷卡数
20120903 号的PERCENTAGE_OF= (20120903号的刷卡数-20120902 号的刷卡数)/20120902号的刷卡数

20120904 号的 PHASE_NUMBER = 20120904号的刷卡数-20120903 号的刷卡数
20120904 号的PERCENTAGE_OF= (20120904号的刷卡数-20120903 号的刷卡数)/20120903号的刷卡数
以此类推

第1个回答  推荐于2016-05-15

一条语句可以解决,用不着for游标循环。

create table M_TATTENDANCEDATA(TR_DATE char(8),PAY_CARD_COUNT int);

insert into M_TATTENDANCEDATA values(20120922, 324);

insert into M_TATTENDANCEDATA values(20120921, 314);

insert into M_TATTENDANCEDATA values(20120920, 306);

insert into M_TATTENDANCEDATA values(20120919, 305);

insert into M_TATTENDANCEDATA values(20120918, 304);

select TR_DATE 日期,PAY_CARD_COUNT 刷卡数,

       PAY_CARD_COUNT-Lag(PAY_CARD_COUNT,1)OVER(order by TR_DATE) 相差数,

       round((PAY_CARD_COUNT-Lag(PAY_CARD_COUNT,1)OVER(order by TR_DATE))/

              Lag(PAY_CARD_COUNT,1)OVER(order by TR_DATE)*100,2) 相差比

  from M_TATTENDANCEDATA order by TR_DATE;

本回答被提问者采纳
第2个回答  2012-11-22
不明白你的意思,你最终要实现什么效果???追问

请查看补充解释