发布网友 发布时间:2022-04-09 06:55
共4个回答
懂视网 时间:2022-04-09 11:16
最近遇到一个比较常见的问题,每行记录需要累加求和。这些问题倒不是有多难,主要是在工作的过程中会经常遇到,特别是Oracle自带的一些函数也能够很好地解决这样一些通用的查询计算,在此记录一下。
问题描述:比如查询记录有5行,每行记录有一个数值型的字段。第2行为第1、2行的和;第3行为第1、2、3行的和;第4行为第1、2、3、4行的和;后面依此类推……
解决办法:使用Oracle自带的Over函数。如下例子:
1.建测试表EMP
-- Create table
create table EMP
(
DEPTNO NUMBER(4),
ENAME VARCHAR2(20),
SAL NUMBER(10)
)
tablespace OGDP
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 16
minextents 1
maxextents unlimited
);
2.插入测试数据
insert into emp (DEPTNO,ENAME,SAL) values (1,‘CLARK‘,2450);
insert into emp (DEPTNO,ENAME,SAL) values (2,‘SMITH‘,3000);
insert into emp (DEPTNO,ENAME,SAL) values (3,‘ALLEN‘,1250);
insert into emp (DEPTNO,ENAME,SAL) values (4,‘JAMES‘,950);
查询结果如下:
3.编写SQL(用Over函数)
select t.deptno,
t.sal,
sum(t.sal) over (order by t.deptno) AccuSal
from emp t
查询结果如下:
如上所示就是需要的效果,更多关于Over函数可以参考以下:
Oracle逐行累加求和
标签:
热心网友 时间:2022-04-09 08:24
另外声明一个变量 sum_num number ; 初始值 := 0 ;热心网友 时间:2022-04-09 09:42
首先判断你的那些字段的数据类型,然后循环前要给起始值,不然容易报错。建议char 和varchar2做参要注意。建议用pl/sql工具测试下,单步进入就可以发现问题了热心网友 时间:2022-04-09 11:17
num需要在循环开始前赋初值: