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

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

@H_301_2@

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

@H_301_2@

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

@H_301_2@

核心代码如下:

@H_301_2@

SELECT SUBSTR(A.业务,1,2) 行政区域,SUBSTR(A.业务,3,LENGTH(A.业务)-2) 业务模块,A.已结案,A.办理中,A.案件总数,

ROUND(A.已结案 /decode(A.案件总数,9999,A.案件总数),4) * 100 || '%' 完成率

@H_301_2@

FROM

@H_301_2@

(SELECT '市级律师服务' 业务,

@H_301_2@

1 排序,

@H_301_2@

SUM(CASE WHEN 区县代码 IS NULL AND (TRUNC(委托时间,'DD') BETWEEN V_SJQ AND V_SJZ) AND 申请状态代码 IN ('ztdm1','ztdm2') THEN 1 ELSE 0 END) 已结案,'DD') BETWEEN V_SJQ AND V_SJZ) AND 申请状态代码 NOT IN ('ztdm1','ztdm2') THEN 1 ELSE 0 END) 办理中,'DD') BETWEEN V_SJQ AND V_SJZ) AND 申请状态代码 IS NOT NULL THEN 1 ELSE 0 END) 案件总数

@H_301_2@

FROM TA_律师申请委托

@H_301_2@

)A

@H_301_2@

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

@H_301_2@

ORDER BY A.排序;

@H_301_2@

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

@H_301_2@

sql;">

V_排序1 INTEGER;

V_排序2 INTEGER;

V_排序3 INTEGER;

V_排序4 INTEGER;

V_排序5 INTEGER;

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

SELECT

DECODE(P_管理员编号,'test1',2,'test2','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;

总结@H_301_2@

目前测试数据量不大,优化前后性能差别不明显,但是代码行数减少了3倍以上,可读性明显增强,少了很多IF判断,理论上复杂度减少很多。@H_301_2@

以上就是本文关于ORACLE多条件统计查询的简单方法的全部内容,希望对大家有所帮助。感兴趣的朋友可以参阅:、、分页查询性能优化代码详解 等,有什么问题可以随时留言,小编会及时回复大家。感谢朋友们对编程之家网站的支持!@H_301_2@

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值