gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章ORACLE多条件统计查询的简单方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前几天要做一个统计查询的功能,因为涉及多张表,多种条件的统计分析。一开始便想到了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.排序,

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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多条件统计查询的简单方法的全部内容,希望对大家有所帮助.

原文链接:http://www.cnblogs.com/luowz/p/5804639.html 。

最后此篇关于ORACLE多条件统计查询的简单方法的文章就讲到这里了,如果你想了解更多关于ORACLE多条件统计查询的简单方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com