场景如下:我现在有表A的数据,想把表A的数据插入到表B中,然后每插入99行,第100行对前99行的一个字段进行sum操作,其余置空字段字段置空,以此类推循环。最后不足99行的,如剩余40行则第41行对前40行进行和前面一样的操作。
请问这种该何如实现啊?
我比较新手,希望各位大牛能详尽的指导下。。。。
------解决方案--------------------
太晚了,我就懒得起服务了来测试,你自己试试看吧。
- SQL code
create table ta(id number, val number);create table tb(id number, val number);--给插入测试数据declare begin for i in 1..210 loop insert into ta values(i,i+10); end loop; end;--把表ta数据按照你的要求复制到表tb,先得到总过需要循环多少遍,然后没循环一次,查询出对应的100条数据,然后union统计的那一行数据,再将这101条数据插入到表tb中去。declarepages number;begin select ceil(count(*)/100) into pages from ta; for i in 1..pages loop insert into tb select * from ta where rownum between (i-1)*100+1 and i*100 union all select null id, (select sum(val) from ta where rownum between (i-1)*100+1 and i*100) val from dual; end loop;end;
------解决方案--------------------
这要根据真实业务弄。
一个简单的例子
insert into b (
select col1 ,sum(col1)
from (select col1,ceil(rownum/99) rn ,rownum from a01)
group by rollup(rn ,col1));
即,按需求把数据分组,然后每99行算一个标识符,根据标识符分组求和汇总