场景如下:我现在有表A的数据,想把表A的数据插入到表B中,然后每插入99行,第100行对前99行的一个字段进行sum操作,其余置空字段字段置空,以此类推循环。最后不足99行的,如剩余40行则第41行对前40行进行和前面一样的操作。请问这种该何如实现啊?我比较新手,希望各位大牛能详尽的指导下。
解决方案 »
- 这两种方式建的范围分区表有什么区别呢
- oracle11g r2驱动问题
- 存储过程如何并行【在线等】
- weblogic(10G)服务发布为Windows系统服务,为何启动不了?
- 存储过程中如何插入批量数据
- Oracle 提示从未创建保存点的问题
- 请教下: ORACEL 中,使用select 语句时, 如何将表中的各字段 按“|”分隔符分开 选择出出来。 謝了。
- 是不是在ORACLE的存储过程中不支持SELECT语句呀
- oracle9i要如何修改初始化(init.ora)参数的值?
- 在oracle中如何判断是否是数字?
- 关于ROWNUM和ORDER BY的问题
- Oracle分组sql问题,在线坐等高人回答(急)
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中去。
declare
pages 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行算一个标识符,根据标识符分组求和汇总
SELECT INDCODE,CEIL(ROWNUM/6) RN FROM hi_indicators
)
GROUP BY ROLLUP(RN,INDCODE)INDCODE COUNT(1)
-------------------------------- ----------------------
I00000351 1
I00000352 1
I00000353 1
I00000354 1
I00000355 1
I00000356 1
6
I00000357 1
I00000385 1
2
8 选定了 11 行 简单的几个字段应该没问题。
确实,看来这个 group by rollup也很棒,我测试下我的数据看看