`
yjzagan2003
  • 浏览: 36373 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Oracle分组统计小计放在最后一行的处理

阅读更多

      在做统计查询,需要一个小计百分数放在最后一行,但不是最大最小的。处理过程如下记录:

SELECT '工单' AS BILTYPENAME,
               CASE WHEN BUREAU_ID IS NULL THEN '小计'
               ELSE BUREAU_ID
               END AS BUREAU_ID,
               CASE WHEN BILLSERVER_ENNAME IS NULL AND BUREAU_ID IS NOT NULL 
                 THEN '小计'
                 ELSE BILLSERVER_ENNAME
               END AS BILLSERVER_ENNAME,
               SUM(TOTAL) AS TOTAL,
               SUM(SUCC_NUM) AS SUCCNUM,
               SUM(FAIL_NUM) AS FAILNUM,
               DECODE(SUM(SUCC_NUM) / SUM(TOTAL),NULL,'0',1,'100',
                    TO_CHAR(ROUND(SUM(SUCC_NUM) / SUM(TOTAL), 4) * 100
                        ,'fm90.00')) || '%' 
               AS SUCCESSRATE,
               DECODE(BILLSERVER_ENNAME, NULL, -1, 1) 
                   *ROUND(SUM(SUCC_NUM) / SUM(TOTAL), 4) AS PAIXU
          FROM APP_ORIGINBILL_STAT_DAY ORIGINBILLOBJ
         WHERE 1 = 1
         GROUP BY ROLLUP(BUREAU_ID, BILLSERVER_ENNAME)
         ORDER BY BUREAU_ID NULLS LAST, PAIXU DESC

 这里百分数用 DECODE(SUM(SUCC_NUM) / SUM(TOTAL),NULL,'0',1,'100',
                    TO_CHAR(ROUND(SUM(SUCC_NUM) / SUM(TOTAL), 4) * 100 ,'fm90.00')) || '%'  来表示,这样最后排序时,有可能小计位于中间位置,通过 PAIXU 字段  DECODE(BILLSERVER_ENNAME, NULL, -1, 1)
                   *ROUND(SUM(SUCC_NUM) / SUM(TOTAL), 4)  重新进行降序排序,可以真正实现如图的排序。

 

 应该有更好的方法,希望能提供!

  • 大小: 110.2 KB
0
0
分享到:
评论

相关推荐

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    8.5.4 例2:从下一行中返回一个值 204 8.6 First_value和Last_value 205 8.6.1 例子:使用First_value来计算最大值 206 8.6.2 例子:使用Last_value来计算最小值 207 8.7 其他分析函数 207 8.7.1 Nth_value(11...

    最全的oracle常用命令大全.txt

    可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行 DEFINE_EDITOR=vi f、运行命令文件 SQL>START test SQL>@test 常用SQL*Plus语句 a、表的创建、修改、删除 创建表的...

    oracle数据库经典题目

    游标的作用是将数据库的中数据检索出来后缓存,可以被PL/SQL程序一行一行的读取并处理。支持一条、多条、零条记录的处理。 游标的基本操作步骤为: (1)声明游标,使用查询来定义游标的列和行 (2)打开游标,使用PL/...

    2009达内SQL学习笔记

    SQL语句可以在一行上写出,建议多行写出,便于阅读和调试。 多条SQL语句必须以分号分隔。多数DBMS不需要在单条SQL语句后加分号,但特定的DBMS可能必须在单条SQL语句后加分号。 SQL语句的最后一句要以 “;”号...

    orcale常用命令

    可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行 DEFINE_EDITOR=vi f、运行命令文件 SQL>START test SQL>@test 常用SQL*Plus语句 a、表的创建、修改、删除 创建表的...

    sql经典语句一部分

    两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时...

    数据库操作语句大全(sql)

    两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时...

    经典SQL语句大全

    两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时...

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

    mysql数据库的基本操作语法

    注意:alter modify不支持一次修改多个列,但是Oracle支持多列修改 但是MySQL可以通过多个modify的方式完成: alter table user modify tel varchar(15) default '02087654321' first, modify name varchar(20) ...

Global site tag (gtag.js) - Google Analytics