`
oboaix
  • 浏览: 275308 次
社区版块
存档分类
最新评论

数据库连续区间汇总(求和)一例,rownum伪列利用(原创)

 
阅读更多

     环境(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数据库伪列简单介绍

    ### Oracle数据库伪列简析:rownum与rowid的区别 在Oracle数据库中,存在一种特殊的数据类型被称为“伪列”,这些伪列虽然看起来像是表中的列,但实际上它们并不存储任何数据,而是由数据库动态生成的。本文将重点...

    伪列(pseudo column)ROWNUM介绍

    在Oracle数据库中,`ROWNUM`是一个非常有用的伪列(也被称为虚拟列),它为每一行分配了一个唯一的行号。该行号从1开始递增,但请注意,`ROWNUM`并不是表的一部分,也不会存储在表中;相反,它是在查询执行过程中...

    Oracle 11g数据库学习笔记三

    ROWNUM伪列是Oracle 11g数据库中的一种数据伪列,它可以为每一条显示的记录生成一个unique的行号。这个行号不是固定的,每次查询都会重新生成。使用ROWNUM伪列可以实现数据的分页功能,例如查询前5条记录或查询6-10...

    oracle中利用关键字rownum查询前20名员工信息及rownum用法

    注意:对 rownum(伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据  例:查询工资前20名的员工姓名,工资 ,工资由高到低 Select rownum,first_name,salary from (Select first_name, salary ...

    oracle的伪列与分页

    在Oracle数据库中,伪列(Pseudocolumn)并非真正意义上的列,而是一种特殊的数据库对象,它看起来像表中的一个列,但实际上并不存储数据。Oracle提供了一些内置的伪列供用户使用,如`ROWID`和`ROWNUM`等,这些伪列...

    Oracle中使用伪列rownum实现分页查询

    Oracle提供了一种特殊类型的列,称为伪列(Pseudo-Column),其中一个最著名的例子就是`ROWNUM`。`ROWNUM`伪列在查询执行时自动为每一行分配一个唯一的整数,从1开始递增。在分页查询中,我们可以巧妙地利用`ROWNUM`...

    select分页查询1

    Oracle 数据库提供了多种方式来实现分页查询,包括使用 ROWNUM 伪列、analytic 函数和子查询等。下面将对这些方法进行详细介绍。 使用 ROWNUM 伪列 ROWMNUM 伪列是 Oracle 数据库中一种特殊的伪列,它可以用来限制...

    oracle伪列以及伪表.doc

    Oracle数据库系统包含一组特殊的列,被称为伪列,它们在创建表时不由用户定义,而是由Oracle系统自动提供。这些伪列扩展了Oracle的功能,使得数据库操作更为便捷和灵活。此外,Oracle还提供了一个名为DUAL的伪表,...

    22面试数据库相关技术汇总1

    数据库相关技术汇总 数据库技术是信息系统的核心组件之一,对于数据库的理解和掌握是非常重要的。本文将对数据库相关技术进行总结,涵盖 MySQL 和 Oracle 两个主流数据库管理系统。 一、数据库分页技术 数据库...

    17.Oracle伪列1

    在Oracle数据库中,伪列是一种特殊的数据类型,它们表现得像普通列,但并不实际存储在表中。Oracle提供了两种主要的伪列:rowid和rownum,它们各自拥有独特的功能和用途。 一、rowid伪列 1. rowid原理 rowid是...

    对于 Oracle 的 rownum 问题

    =),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid ...

    关于oracle的rownum

    Oracle 的 ROWNUM 伪列是一个非常重要的概念,它对结果集加的一个伪列,即先查到结果集之后再加上去的一个列。了解 ROWNUM 的意义是非常重要的,否则可能会出现莫名其妙的结果。 ROWNUM 的特点是从 1 开始排起的...

    oracle伪列以及伪表.docx

    Oracle数据库系统中,伪列和伪表是两个特殊的概念,它们为数据库操作提供了额外的功能和便利。本文将详细探讨这两个概念及其应用场景。 首先,我们来理解什么是伪列。伪列并非用户在创建表时定义的列,而是Oracle...

    oracle伪列以与伪表.doc

    Oracle数据库系统中,伪列和伪表是其特有的概念,用于增强数据库的功能和操作灵活性。伪列不是用户在创建表时定义的列,而是Oracle系统自动生成的特殊列,它们提供了额外的信息或功能。以下是关于Oracle伪列和伪表的...

    ROWNUM的使用技巧

    利用 ROWNUM,我们可以生产一些原先难以实现的结果输出,但是因为它是伪列的特殊性,在使用时需要注意一些事项,以免掉入“陷阱”。 特殊结果输出 使用 ROWNUM,我们可以实现一些特殊方式的输出,如 Top N 结果...

    oracle中取中间记录的方法

    本文将详细介绍如何利用Oracle中的`MINUS`操作符以及`ROWNUM`伪列来实现这一功能。 #### ROWNUM伪列简介 在介绍具体方法之前,我们首先了解一下`ROWNUM`伪列的基本概念。`ROWNUM`是Oracle提供的一种特殊的伪列,它...

    ORACLE数据库中ROWNUM用法详解

    ROWNUM是一个伪列,意味着它并不是数据库表中实际存在的列,而是Oracle数据库在执行查询时动态生成的一个序列号,用于标记查询结果集中的每一行。这个序列号从1开始,每次查询都会重新计算。 在使用ROWNUM时,有...

    oracle的分页查询

    一、使用 ROWNUM 伪列实现分页查询 在 Oracle 中,ROWNUP 伪列是一个特殊的列,可以用来实现分页查询。例如,我们可以使用以下语句来查询前三个行: ```sql Select * from table1 where rownum ; ``` 这将返回表 ...

    ORACLE 中ROWNUM用法总结

    在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,用于限制查询结果的行数,尤其是在处理大数据量或进行分页查询时。然而,`ROWNUM`的使用并不直观,尤其是当涉及到比较运算符(如`>`, `>=`, `=`等)时,容易引发...

    oracle rownum 学习

    这是因为ROWNUM是一个总是从1开始的伪列,Oracle认为`ROWNUM>n`(n>1的自然数)这种条件不成立。可以使用子查询方法来解决,例如: ```sql SELECT * FROM ( SELECT ROWNUM NO, ID, NAME FROM STUDENT ) WHERE NO > 2;...

Global site tag (gtag.js) - Google Analytics