网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.关于数据文件头的检查点SCN..
.如何查找日期为某一天的文件.
.Application Server额外功能.
.在Windows下管理Oracle9i 服务.
.简单试验一下Bulk Binds对性能的.
.Oracle Forms9i工具栏的实现.
.关于Oracle 对 Linux 的策略的FAQ.
.Oracle10g SQL*PLUS 的一些特性.
.用Oracle的SQL*Plus工具创建HTML.
.Oracle9i基于视图(view)的约束声.
.破解Oracle一般用户的口令.
.PL/SQL循序渐进全面学习教程--Or.
.10g新特性expdp与传统exp的速度比.
.TIP 如何为表加唯一约束(保存或者.
.Oracle FAQ 2003.02精华.
.用智能优化限制来提高Oracle性能.
.Oracle 数据库系统使用经验.
.ORACLE常用的SQL语法和数据对象.
.PROC++批量导入导出ORACLE数据.
.Oracle聚合函数RANK和dense_rank.

在报表视图中实现分类显示

发表日期:2008-2-9



  1 前言 
  在实现用户的报表过程中,用户经常会提出一个看似很合符情理的要求,但实现起来却困难重重,如下:
  收款明细表<省略其它字段>
  
  数据样式
  日期    收款金额
  2004.02.20  87
  2004.02.20  93
  2004.02.21  100
  2004.02.20  50
  ...
  
  报表样式
  日期    收款金额
  2004.02.20  87
  <Null>    93<没有值,与上一笔记录相同,日期为:2004.02.20>
  2004.02.21  100
  <Null>    50<没有值,与上一笔记录相同,日期为:2004.02.21>
  ...
  
  2 实现思路
  利用OVER函数,算出当前记录在记录集中出现的次数,假如次数大于1,则不返回NULL。
  
  3 实例演练 
  --3.1 测试环境
  Drop Table Test_ReRecord;
  create table Test_ReRecord
  (
    BillDate Date not null,
    Money   Number(20,4) Not Null
  )
  /
  Insert Into Test_ReRecord 
   Values
   (
    To_Date('2004.02.20','yyyy.mm.dd')
    ,100);
  Insert Into Test_ReRecord 
   Values
   (
    To_Date('2004.02.20','yyyy.mm.dd')
    ,120);
  Insert Into Test_ReRecord 
   Values
   (
    To_Date('2004.02.20','yyyy.mm.dd')
    ,80);
  Insert Into Test_ReRecord 
   Values
   (
    To_Date('2004.02.21','yyyy.mm.dd')
    ,166);
  Insert Into Test_ReRecord 
   Values
   (
    To_Date('2004.02.21','yyyy.mm.dd')
    ,221);
  Commit;
  
  --3.2 SELECT语句讲释
  SELECT 
    DECODE(RN,1,BillDate) BillDate --假如BillDate在原始记录集中出现超过1次,则显示空值
    ,Money
   From
    (
     SELECT 
       BillDate
       ,Money
       ,ROW_NUMBER() --通过OVER函数返回相同的BillDate当前出现的次数
      OVER 
       (
        Partition By BillDate --根据BillDate进行分区,即碰到不同的BillDate,Row_Number就恢复从1开始计数
        Order By BillDate --根据BillDate进行排序,一般配合Partition By子项使用。
       ) RN 
      FROM 
       Test_ReRecord
     );
上一篇:将纵向数据列表转化为横向数据字段 人气:814
下一篇:Oracle备份的分类总结分析 人气:685
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐