`
haoooooj
  • 浏览: 2897 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

oracle sql

阅读更多

用 oracle 的 sql 实现 的报表格式

 

以前常遇到一些这样的问题,需要在jsp页面或者报表上面显示某一年的数据统计。表里面是数据流水,我们需要的结果是:

 

 

一月流水,

一月流水,

一月流水,

一月小计,

二月流水,

二月流水,

二月流水,

二月小计,

.

.

.

合计。

 

 

这种显示方式可以有多种实现方式,java,jsp,报表内部的库等,下面看看仅用sql是如何实现的。代码是以前工作中的代码,先贴出来,有空再简化为更直观的。

 

with
 condition as (select ? begin_date,? end_date from dual),
 t      as (
 SELECT -1 flag, f.bps_flow_no bps_flow_no
   FROM POS_CONSUME_FLOW f
  where f.STATE = 'D'  AND f.TRADE_NO = 'T00004'

 union all

 SELECT 1 flag, f.bps_flow_no bps_flow_no
   FROM POS_CONSUME_FLOW f
   where f.STATE='A'
    or (f.state='D' and f.trade_no='T00002')
)
select rownum rn,
       jur_bank,
       mer_no,
       pos_no,
       card_no,
       cut_scale,
       local_register_date,
       c_amount,
       c_accounte,
       shouxu,
       merfendan,
       mer_scale,
       huazhang
from(
(
select
       a.jur_bank||a.mer_no||b.pos_no||'1'||to_char(b.local_register_date,'yyyymmdd') myorder,
       a.jur_bank,
       a.mer_no,
       b.pos_no pos_no,
       b.card_no,
       a.cut_scale,
       b.local_register_date,
       nvl(t.flag,1)*nvl(b.c_amount,0) c_amount,
       nvl(t.flag,1)*nvl(b.c_accounte,0) c_accounte,
       nvl(t.flag,1)*nvl(b.c_amount,0)*(1-nvl(a.mer_scale,0))*a.cut_scale shouxu,
       nvl(t.flag,1)*nvl(b.c_amount,0)*a.mer_scale    merfendan,
       a.mer_scale     mer_scale,
       nvl(t.flag,1)*( nvl(b.c_amount,0) - nvl(b.c_amount,0)*a.mer_scale - nvl(b.c_amount,0)*(1-nvl(a.mer_scale,0))*a.cut_scale ) huazhang
  from t_merchant a, pos_consume_flow b,t t,condition c
 where a.mer_no = b.merchant_no
 and b.bps_flow_no=t.bps_flow_no
 and b.c_amount!=0
 and b.local_register_date >=to_date(c.begin_date,'yyyy-mm-dd')
 and b.local_register_date<=to_date(c.end_date,'yyyy-mm-dd')
 and b.STATE in ('A','D')
union all

  select
       a.jur_bank||a.mer_no||b.pos_no||'2' myorder,
       a.jur_bank,
       a.mer_no mer_no,
       '小计:' pos_no,
       null,
       max(a.cut_scale),
       null,
       sum(nvl(t.flag,1)*nvl(b.c_amount,0)) c_amount,
       sum(nvl(t.flag,1)*nvl(b.c_accounte,0)) c_accounte,
       sum(nvl(t.flag,1)*nvl(b.c_amount,0)*(1-nvl(a.mer_scale,0))*a.cut_scale)    shouxu,
       sum(nvl(t.flag,1)*nvl(b.c_amount,0)*a.mer_scale)    merfendan,
       max(a.mer_scale)     mer_scale,
       sum(nvl(t.flag,1)*( nvl(b.c_amount,0) - nvl(b.c_amount,0)*a.mer_scale - nvl(b.c_amount,0)*(1-nvl(a.mer_scale,0))*a.cut_scale )) huazhang
from t_merchant a, pos_consume_flow b,t t,condition c
 where a.mer_no = b.merchant_no
  and b.bps_flow_no=t.bps_flow_no
  and b.c_amount!=0
 and b.local_register_date >=to_date(c.begin_date,'yyyy-mm-dd')
 and b.local_register_date<=to_date(c.end_date,'yyyy-mm-dd')
 and b.STATE in ('A','D')
  group by a.jur_bank,a.mer_no,b.pos_no

union all

select
       a.jur_bank||a.mer_no||'3' myorder,
       a.jur_bank,
       a.mer_no mer_no,
       '合计 : pos_no,
       null,
       max(a.cut_scale),
       null,
       sum(nvl(t.flag,1)*nvl(b.c_amount,0)) c_amount,
       sum(nvl(t.flag,1)*nvl(b.c_accounte,0)) c_accounte,
       sum(nvl(t.flag,1)*nvl(b.c_amount,0)*(1-nvl(a.mer_scale,0))*a.cut_scale)    shouxu,
       sum(nvl(t.flag,1)*nvl(b.c_amount,0)*a.mer_scale)    merfendan,
       max(a.mer_scale)     mer_scale,
       sum(nvl(t.flag,1)*( nvl(b.c_amount,0) - nvl(b.c_amount,0)*a.mer_scale - nvl(b.c_amount,0)*(1-nvl(a.mer_scale,0))*a.cut_scale )) huazhang
from t_merchant a, pos_consume_flow b,t t,condition c
 where a.mer_no = b.merchant_no
  and b.bps_flow_no=t.bps_flow_no
  and b.c_amount!=0
 and b.local_register_date >=to_date(c.begin_date,'yyyy-mm-dd')
 and b.local_register_date<=to_date(c.end_date,'yyyy-mm-dd')
 and b.STATE in ('A','D')
  group by a.jur_bank,a.mer_no

order by myorder

)
)

 

实际上就是用union all 和自定义派序列 myorder 来实现的,myorder利用了oracle对varchar2的排序是先比较第一个字符,然后比较第二个,以此类推。比如:  'a19999999'  比 'a2' 小。

 

分享到:
评论

相关推荐

    Oracle Sql语句转换成Mysql Sql语句

    在数据库管理领域,Oracle SQL和MySQL SQL是两种广泛使用的SQL方言,它们在语法和功能上存在一定的差异。当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个...

    Oracle SQL高级编程

    由于标题和描述是重复的且没有提供实质性的内容,我们无法从中得知具体的Oracle SQL高级编程知识点。但是,从标题我们可以推测该文档可能是关于如何使用Oracle数据库中的SQL语言进行高级编程。Oracle数据库是一个...

    oracle SQL查询工具

    oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具...

    Oracle SQL 官方文档

    Oracle SQL 是一种强大的数据库查询和编程语言,广泛用于管理和操作Oracle数据库系统。11g第二版(11G2)是Oracle的一个重要版本,提供了许多增强功能和优化。本官方文档集包括四份重要的参考资料,涵盖了Oracle SQL...

    Oracle Sql基础(beginning oracle sql中文版)

    Oracle SQL是数据库管理员和开发人员用来与Oracle数据库交互的语言,它是SQL标准的扩展,提供了许多特有的功能和优化。本资源“Oracle Sql基础(beginning oracle sql中文版)”旨在为初学者提供一个全面的Oracle ...

    ORACLE SQL性能优化系列

    ORACLE SQL性能优化系列 ORACLE SQL性能优化是数据库管理员和开发者非常关心的一个话题。为了提高数据库的性能,ORACLE 提供了多种优化技术。下面我们将详细介绍 ORACLE SQL 性能优化系列中的一些重要知识点。 一...

    Oracle SQL Developer 使用说明

    Oracle SQL Developer 是一款由Oracle公司推出的强大的数据库管理工具,它为数据库管理员(DBA)、开发者以及数据分析师提供了全面的功能,以高效地管理和操作Oracle数据库。本文档将深入讲解Oracle SQL Developer的...

    Oracle四大宝典之一:Oracle Sql基础 中文版

    第三章 ORACLE SQL 单行函数 第四章 从多表中查询数据 第五章 用组函数合计数据 第六章 子查询 第七章 操纵数据 第八章 创建和管理表 第九章 内置约束 第十章 创建视图 第十一章 其他数据库对象 第十二章 控制用户...

    记使用Oracle SQL Developer 迁移MySql 数据至 Oracle.docx

    本文将详细讲解如何使用Oracle SQL Developer工具进行这样的迁移过程,以及如何解决在迁移过程中遇到的问题。 首先,确保你拥有正确的工具。在这个案例中,你需要MySQL 5.6.37、Oracle 11g以及Oracle SQL Developer...

    精通OracleSQL第2版.zip

    《精通Oracle SQL(第2版)》是一本深入解析Oracle数据库查询语言的专业书籍,由Oracle ACE和OakTable团队的专家共同撰写,集成了他们的丰富经验和专业知识。这本书旨在帮助读者掌握Oracle SQL的高级技巧,提升在...

    Oracle-SQL.rar_oracle_oracle sql_sql

    在“Oracle-SQL.rar”这个压缩包中,包含了一份名为“Oracle SQL.ppt”的文件,这可能是一个PowerPoint演示文稿,用于详细讲解Oracle数据库的基础知识和SQL语言的使用。下面,我们将深入探讨一些Oracle SQL的基础...

    oracle sql developer数据库连接成功后打不開表

    ### Oracle SQL Developer数据库连接成功后无法打开表的问题分析与解决 #### 问题概述 在使用Oracle SQL Developer工具时,部分用户可能会遇到一个较为常见的问题:虽然已经成功连接到Oracle数据库,但是在左侧的...

    Oracle SQL:经典练习题(附答案)

    Oracle SQL是数据库管理和数据分析的重要工具,尤其在处理Oracle数据库时不可或缺。本文提供的经典练习题旨在帮助初学者熟悉SQL语句的编写,特别是针对Oracle数据库特有的功能。以下将详细讲解涉及的知识点。 1. **...

    oracle sqldeveloper连接mysql、SQLServer第三方dll

    解决oracle sqldeveloper无法连接mysql、SQLServer问题,sqlDeveloper是ORACLE数据库开发工具,自带的是无法连接MS SQL Server以及mysql的,想连接的话需要第三方工具。 使用方法: 解压出来后将2个jar放入jlib...

    OracleSQLDeveloper

    Oracle SQL Developer 是一款由Oracle公司推出的免费数据库管理工具,它为数据库管理员(DBA)和开发人员提供了一个全面的集成环境,以便于管理和操作Oracle数据库。这个工具的强大之处在于其直观的用户界面和广泛的...

    oraclesql判断值为空-Oracle-sqlserver的空值(null)判断.pdf

    Oracle SQL 判断值为空OrNull 判断 Oracle SQL 中判断值为空或 Null 的方法有多种,在本文中,我们将介绍 Oracle 和 SQL Server 中的空值判断方法。 Oracle 中的空值判断 在 Oracle 中,可以使用 `NVL` 函数来...

    精通 ORACLE SQL高级编程 学习笔记

    精通Oracle SQL【第2版】ORACLE SQL高级编程【第二版】学习笔记

    Oracle SQL 内置函数大全

    Oracle SQL 内置函数大全 SQL中的单记录函数 给出整数,返回对应的字符 连接两个字符串 增加或减去月份 用于对查询到的结果进行排序输出

Global site tag (gtag.js) - Google Analytics