环境(Oracle Database 10g Enterprise Edition Release 10.2.0.1.0)
工作中碰到如此问题,报表汇总统计,从单表中获取连续区间内某单值的汇总和值,研究发现,通过Oracle一些内部函数以及伪劣Rownum可以初步解决类似问题,或者通过转换形成类似数据再行生成能够借鉴Rownum参与差值比较获取分组区间区域值。
下面为一典型SQL示例:
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as hr
SQL>
SQL> create table T_contGroupSum(
2 deptno varchar2(10),
3 groupno varchar2(10),
4 val number(10,2)
5 );
Table created
SQL>
SQL> begin
2 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D01', 'A', 10.00);
3 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D01', 'B', 10.00);
4 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D01', 'C', 10.00);
5 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D01', 'E', 20.00);
6 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D02', 'F', 20.00);
7 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D03', 'G', 20.00);
8 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D03', 'H', 20.00);
9 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D03', 'I', 20.00);
10 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D03', 'M', 40.00);
11 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D03', 'N', 40.00);
12 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D04', 'R', 60.00);
13 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D05', 'X', 80.00);
14 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D05', 'Y', 80.00);
15 insert into T_contGroupSum (DEPTNO, GROUPNO, VAL) values ('D05', 'Z', 80.00);
16 COMMIT;
17 end;
18 /
PL/SQL procedure successfully completed
SQL> select * from T_contGroupSum;
DEPTNO GROUPNO VAL
---------- ---------- ------------
D01 A 10.00
D01 B 10.00
D01 C 10.00
D01 E 20.00
D02 F 20.00
D03 G 20.00
D03 H 20.00
D03 I 20.00
D03 M 40.00
D03 N 40.00
D04 R 60.00
D05 X 80.00
D05 Y 80.00
D05 Z 80.00
14 rows selected
SQL>
SQL> select t.deptno,min(t.groupno) mingroupno,max(t.groupno) maxgroupno,sum(t.val) from T_contGroupSum t
2 where 1=1 group by t.deptno,ascii(t.groupno)-64-rownum order by 1;
DEPTNO MINGROUPNO MAXGROUPNO SUM(T.VAL)
---------- ---------- ---------- ----------
D01 A C 30
D01 E E 20
D02 F F 20
D03 G I 60
D03 M N 80
D04 R R 60
D05 X Z 240
7 rows selected
SQL>
分享到:
相关推荐
### Oracle数据库伪列简析:rownum与rowid的区别 在Oracle数据库中,存在一种特殊的数据类型被称为“伪列”,这些伪列虽然看起来像是表中的列,但实际上它们并不存储任何数据,而是由数据库动态生成的。本文将重点...
在Oracle数据库中,`ROWNUM`是一个非常有用的伪列(也被称为虚拟列),它为每一行分配了一个唯一的行号。该行号从1开始递增,但请注意,`ROWNUM`并不是表的一部分,也不会存储在表中;相反,它是在查询执行过程中...
ROWNUM伪列是Oracle 11g数据库中的一种数据伪列,它可以为每一条显示的记录生成一个unique的行号。这个行号不是固定的,每次查询都会重新生成。使用ROWNUM伪列可以实现数据的分页功能,例如查询前5条记录或查询6-10...
注意:对 rownum(伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据 例:查询工资前20名的员工姓名,工资 ,工资由高到低 Select rownum,first_name,salary from (Select first_name, salary ...
在Oracle数据库中,伪列(Pseudocolumn)并非真正意义上的列,而是一种特殊的数据库对象,它看起来像表中的一个列,但实际上并不存储数据。Oracle提供了一些内置的伪列供用户使用,如`ROWID`和`ROWNUM`等,这些伪列...
Oracle提供了一种特殊类型的列,称为伪列(Pseudo-Column),其中一个最著名的例子就是`ROWNUM`。`ROWNUM`伪列在查询执行时自动为每一行分配一个唯一的整数,从1开始递增。在分页查询中,我们可以巧妙地利用`ROWNUM`...
Oracle 数据库提供了多种方式来实现分页查询,包括使用 ROWNUM 伪列、analytic 函数和子查询等。下面将对这些方法进行详细介绍。 使用 ROWNUM 伪列 ROWMNUM 伪列是 Oracle 数据库中一种特殊的伪列,它可以用来限制...
Oracle数据库系统包含一组特殊的列,被称为伪列,它们在创建表时不由用户定义,而是由Oracle系统自动提供。这些伪列扩展了Oracle的功能,使得数据库操作更为便捷和灵活。此外,Oracle还提供了一个名为DUAL的伪表,...
数据库相关技术汇总 数据库技术是信息系统的核心组件之一,对于数据库的理解和掌握是非常重要的。本文将对数据库相关技术进行总结,涵盖 MySQL 和 Oracle 两个主流数据库管理系统。 一、数据库分页技术 数据库...
在Oracle数据库中,伪列是一种特殊的数据类型,它们表现得像普通列,但并不实际存储在表中。Oracle提供了两种主要的伪列:rowid和rownum,它们各自拥有独特的功能和用途。 一、rowid伪列 1. rowid原理 rowid是...
=),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid ...
Oracle 的 ROWNUM 伪列是一个非常重要的概念,它对结果集加的一个伪列,即先查到结果集之后再加上去的一个列。了解 ROWNUM 的意义是非常重要的,否则可能会出现莫名其妙的结果。 ROWNUM 的特点是从 1 开始排起的...
Oracle数据库系统中,伪列和伪表是两个特殊的概念,它们为数据库操作提供了额外的功能和便利。本文将详细探讨这两个概念及其应用场景。 首先,我们来理解什么是伪列。伪列并非用户在创建表时定义的列,而是Oracle...
Oracle数据库系统中,伪列和伪表是其特有的概念,用于增强数据库的功能和操作灵活性。伪列不是用户在创建表时定义的列,而是Oracle系统自动生成的特殊列,它们提供了额外的信息或功能。以下是关于Oracle伪列和伪表的...
利用 ROWNUM,我们可以生产一些原先难以实现的结果输出,但是因为它是伪列的特殊性,在使用时需要注意一些事项,以免掉入“陷阱”。 特殊结果输出 使用 ROWNUM,我们可以实现一些特殊方式的输出,如 Top N 结果...
本文将详细介绍如何利用Oracle中的`MINUS`操作符以及`ROWNUM`伪列来实现这一功能。 #### ROWNUM伪列简介 在介绍具体方法之前,我们首先了解一下`ROWNUM`伪列的基本概念。`ROWNUM`是Oracle提供的一种特殊的伪列,它...
ROWNUM是一个伪列,意味着它并不是数据库表中实际存在的列,而是Oracle数据库在执行查询时动态生成的一个序列号,用于标记查询结果集中的每一行。这个序列号从1开始,每次查询都会重新计算。 在使用ROWNUM时,有...
一、使用 ROWNUM 伪列实现分页查询 在 Oracle 中,ROWNUP 伪列是一个特殊的列,可以用来实现分页查询。例如,我们可以使用以下语句来查询前三个行: ```sql Select * from table1 where rownum ; ``` 这将返回表 ...
在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,用于限制查询结果的行数,尤其是在处理大数据量或进行分页查询时。然而,`ROWNUM`的使用并不直观,尤其是当涉及到比较运算符(如`>`, `>=`, `=`等)时,容易引发...
这是因为ROWNUM是一个总是从1开始的伪列,Oracle认为`ROWNUM>n`(n>1的自然数)这种条件不成立。可以使用子查询方法来解决,例如: ```sql SELECT * FROM ( SELECT ROWNUM NO, ID, NAME FROM STUDENT ) WHERE NO > 2;...