前几天要做一个统计查询的功能,因为涉及多张表,多种条件的统计分析。一开始便想到了UNION和IF语句,然后写了1000多行代码,就为了查30条数据觉得不应该。

然后就开始百度,多种条件下的统计。然后有一种语法让我眼前一亮,case when then else end

当满足CASE设定的条件时,就可以执行then语句。由于我要做的分组查询统计,是要罗列每一种情况,而且根据输入的“管理员编号”不同返回不同结果,结果记录的条数和每一种情况是可知的,这个语法完全可用

核心代码如下:

SELECT SUBSTR(A.业务,1,2) 行政区域,SUBSTR(A.业务,3,LENGTH(A.业务)-2) 业务模块,A.已结案,A.办理中,A.案件总数,
ROUND(A.已结案 /decode(A.案件总数, 0, 9999,A.案件总数), 4) * 100 || '%' 完成率
FROM
(SELECT '市级律师服务' 业务,
1 排序,
SUM(CASE WHEN 区县代码 IS NULL AND (TRUNC(委托时间, 'DD') BETWEEN V_SJQ AND V_SJZ) AND 申请状态代码 IN ('ztdm1','ztdm2') THEN 1 ELSE 0 END) 已结案,
SUM(CASE WHEN 区县代码 IS NULL AND (TRUNC(委托时间, 'DD') BETWEEN V_SJQ AND V_SJZ) AND 申请状态代码 NOT IN ('ztdm1','ztdm2') THEN 1 ELSE 0 END) 办理中,
SUM(CASE WHEN 区县代码 IS NULL AND (TRUNC(委托时间, 'DD') BETWEEN V_SJQ AND V_SJZ) AND 申请状态代码 IS NOT NULL THEN 1 ELSE 0 END) 案件总数
FROM TA_律师申请委托

)A

WHERE A.排序 IN(V_排序1,V_排序2,V_排序3,V_排序4,V_排序5)
ORDER BY  A.排序;

通过排序号,来控制不同管理员查询的数据范围不同:

V_排序1  INTEGER;
  V_排序2  INTEGER;
  V_排序3  INTEGER;
  V_排序4  INTEGER;
  V_排序5  INTEGER;

-----------------------------

SELECT
DECODE(P_管理员编号,'test1',2,
       'test2',3,
       'test3',4,
       'test4',5
  ) INTO V_排序1 FROM DUAL;
V_排序2:=V_排序1+6;
V_排序3:=V_排序1+12;
V_排序4:=V_排序1+18;
V_排序5:=V_排序1+24;

目前测试数据量不大,优化前后性能差别不明显,但是代码行数减少了3倍以上,可读性明显增强,少了很多IF判断,理论上复杂度减少很多。最近还学到了ORACLE的分析函数Over,正在研究中。。。。。。

转载于:https://www.cnblogs.com/luowz/p/5804639.html

ORACLE多条件的统计查询(case when)相关推荐

  1. oracle条件查询数量统计,Oracle多条件的统计查询(case when)

    要做一个统计查询的功能,因为涉及多张表,多种条件的统计分析.一开始便想到了UNION和IF语句,然后写了1000多行代码,就为了查30条数据觉得不应该. 然后就开始百度,多种条件下的统计.然后有一种语 ...

  2. oracle多条件分组统计_多条件统计,就必须用Ifs系列函数,绝对的高能!

    数据统计,我们并不陌生,但是在实际的工作或应用中,数据统计都是附加条件的,而且大多情况下是"多条件"的,此时,我们必须掌握"Ifs"系列函数. 一.多条件判断: ...

  3. 【Oracle 常用查询】oracle表空间使用率统计查询

    参考1 --查询表空间使用情况 SELECT Upper(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)&quo ...

  4. Oracle数据库按月统计(候,旬,月,季,年)

    Oracle数据库按月统计 SELECT TO_CHAR(ds.date_time,'YYYY-MM'),count(*) FROM tab_name ds GROUP BY TO_CHAR(ds.d ...

  5. oracle多条件分组查询数量_ORACLE分组查询和统计等

    select flow_id,rw from (select t.flow_id ,rownum as rw from apex_030200.wwv_flow_list_templates t)  ...

  6. oracle查询多个条件查询,ORACLE多条件统计查询的简单方法

    前几天要做一个统计查询的功能,因为涉及多张表,多种条件的统计分析.一开始便想到了UNION和IF语句,然后写了1000多行代码,就为了查30条数据觉得不应该. @H_301_2@ 然后就开始百度,多种 ...

  7. SQL service基础(二)对数据指定列查询、条件查询、查询结果排序、聚集函数查询、分组统计查询

    实验目标: 1.掌握指定列或全部列查询 2.掌握按条件查询 3.掌握对查询结果排序 4.掌握使用聚集函数的查询 5.掌握分组统计查询 一.请完成书中实验7.1,并完成以下问题. 1.查询所有学生的姓名 ...

  8. case when then else_啃食Oracle:条件分支表达式CASE

    啃食Oracle:条件分支表达式CASE CASE表达式是条件分支表达式,类似于if - elsif -else条件分支语句.常见用法是在select的表达式列表中使用. 以下图示来自于官方文档 上图 ...

  9. mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法

    需求: mysql 查询后根据值的不同进行判断与修改 语法结构: SQL中的条件判断语句(case when zhen)用法 SELECT A.品号,属性,        CASE           ...

最新文章

  1. Matlab编程与数据类型 -- M文件的编辑和存储
  2. 解题报告(二)B、(P3338 [ZJOI2014])力(FFT经典套路)(2)
  3. MVC ScriptBundle自定义排序。
  4. 如何安装gnuplot
  5. php本地环境搭建软件下载,用EasyPHP本地搭建PHP环境的步骤分享
  6. img 标签 点击跳出图层_你竟然不知道cad图层也可以导出与导入?
  7. java测试netty_《Netty官方文档》基准测试
  8. spring MVC 的MultipartFile转File读取
  9. OSPF-5类LSA和4类LSA
  10. 陆奇:疫情后将出现哪些创业新机会?
  11. Mysql 数据 导入 导出
  12. 洛谷 P4300 BZOJ 1266 [AHOI2006]上学路线route
  13. php正则 网址,php使用正则表达式获取字符串中的URL
  14. Android下最简单的Audio Player
  15. MATLAB实现主成分分析
  16. 树莓派 引脚及接口图 AV接口顺序
  17. mysql临时表关联查询_MySQL如何执行关联查询
  18. Rxjava Subject分析
  19. R配对样本t检验(PAIRED T-TEST​​​​​​​)
  20. win7下安装配置opengrok

热门文章

  1. h3csyslog_H3C Syslog简单配置
  2. c++jpg转bmp_用C++加速julia:BMP图片读取
  3. Vue 切换路由后页面回到页面顶部
  4. Unknown column 'password_lifetime' in 'field list';创建数据库时创建用户,修改用户时报错
  5. js 判断移动端还是pc端,ios或者android
  6. 图文列表+富文本解析+折线图示例小程序模板
  7. IIS错误代码500.21 ,Nhibernate更新报错,委托的使用。action传参数
  8. jQuery水印插件 - Watermark 和 FormWatermark
  9. RewriteCond 详解
  10. C++ 拷贝构造函数和赋值运算符