自己写了 个查询数据收入的前200名,建个新表dppaim200,然后逐条往表里插入数据,过程如下:
create or replace procedure p_xunhuan(qsrq dppaim200.dqrq%type,jsrq dppaim200.dqrq%type) is --日期参数格式取表里的日期格式,默认是输入
v_sum number :=1; --定义数字类型的变量,初始值1,用做排名循环
begin
delete from dppaim200; --插入之前先清空表数据,一天执行一次就不必要
commit;
loop --进入loop循环
insert into dppaim200
select to_char(sysdate, 'yyyy/mm/dd') dqrq,
t.jglgdid,
t.jglbarcode,
t.jglcname,
t.jglcatid,
w.catcname,
t.sl,
t.sr,
t.ml,
round(decode(t.sr, 0, null, t.ml / t.sr), 4) * 100 || '%' mll,
round(decode(t.sl, 0, null, t.sr / t.sl), 1) sj,
t.e paim
from (SELECT round(sum(sglxssr / 0.81)) sr,
jglgdid,
jglbarcode,
jglcname,
jglcatid,
round(sum(sglsl)) sl,
round(sum(hsml / 0.81)) ml,
row_number() OVER(ORDER BY round(sum(sglxssr / 0.81)) desc) e
FROM jxcgoodslist_day
where to_char(jgldate, 'yyyymmdd') >= qsrq --定义起始日期输入参数
and to_char(jgldate, 'yyyymmdd') <= jsrq --定义结束日期输入参数
and substr(jglcatid, 1, 6) not in
(022003, 011608, 011391)
and jglcname not like '%联营%'
group by jglgdid, jglbarcode, jglcname, jglcatid) t,
goodscat w
where t.e = v_sum --排名等于变量为1的记录插入表
and t.jglcatid = w.catcode
order by t.e;
v_sum := v_sum + 1; --变量自增1,进入下个循环插入排名为2 的记录
exit when v_sum > 200; --当变量大于200时,退出循环
end loop; --结束循环
commit; --提交更新记录
end p_xunhuan;
在命令窗口执行:
执行成功。
查询结果: