oracle case when sum,关于SUM((CASE When的sql语句优化

在编写统计报表程序时,遇到了关于SQL性能的问题。当前的SQL查询使用了大量的CASE WHEN子句进行条件判断和求和,可能造成性能瓶颈。问题在于针对'pq'和'test1'字段的多个组合条件进行了重复计算。为提升效率,可以考虑使用更高效的查询方式,如预计算表、存储过程、或者通过JOIN和位运算来减少计算量。
摘要由CSDN通过智能技术生成

大家好,我在写一个片区统计的报表程序,但总觉得使用sum((case when...这种语句在性能上不是太好,请大家出一下主意。

语句如下:

select

SUM((CASE When pq in ('p01') and test1 in('001') Then 1 Else 0 End)) into p01    ,

SUM((CASE When pq in ('p01') and test1 in('002') Then 1 Else 0 End)) into p02    ,

SUM((CASE When pq in ('p01') and test1 in('003') Then 1 Else 0 End)) into p03    ,

SUM((CASE When pq in ('p01') and test1 in('004') Then 1 Else 0 End)) into p04    ,

SUM((CASE When pq in ('p01') and test1 in('005') Then 1 Else 0 End)) into p05    ,

SUM((CASE When pq in ('p01') and test1 in('006') Then 1 Else 0 End)) into p06    ,

SUM((CASE When pq in ('p01') and test1 in('007') Then 1 Else 0 End)) into p07    ,

SUM((CASE When pq in ('p01') and test1 in('008') Then 1 Else 0 End)) into p08    ,

SUM((CASE When pq in ('p01') and test1 in('009') Then 1 Else 0 End)) into p09    ,

SUM((CASE When pq in ('p01') and test1 in('010') Then 1 Else 0 End)) into p10    ,

SUM((CASE When pq in ('p01') and test1 in('012') Then 1 Else 0 End)) into p11    ,

SUM((CASE When pq in ('p01') and test1 in('013') Then 1 Else 0 End)) into p12    ,

SUM((CASE When pq in ('p01') and test1 in('014') Then 1 Else 0 End)) into p13    ,

SUM((CASE When pq in ('p01') and test1 in('015') Then 1 Else 0 End)) into p14    ,

SUM((CASE When pq in ('p01') and test1 in('016') Then 1 Else 0 End)) into p15    ,

,

SUM((CASE When pq in ('p02') and test1 in('001') Then 1 Else 0 End)) into pz01   ,

SUM((CASE When pq in ('p02') and test1 in('002') Then 1 Else 0 End)) into pz02   ,

SUM((CASE When pq in ('p02') and test1 in('003') Then 1 Else 0 End)) into pz03   ,

SUM((CASE When pq in ('p02') and test1 in('004') Then 1 Else 0 End)) into pz04   ,

SUM((CASE When pq in ('p02') and test1 in('005') Then 1 Else 0 End)) into pz05   ,

SUM((CASE When pq in ('p02') and test1 in('006') Then 1 Else 0 End)) into pz06   ,

SUM((CASE When pq in ('p02') and test1 in('007') Then 1 Else 0 End)) into pz07   ,

SUM((CASE When pq in ('p02') and test1 in('008') Then 1 Else 0 End)) into pz08   ,

SUM((CASE When pq in ('p02') and test1 in('009') Then 1 Else 0 End)) into pz09   ,

SUM((CASE When pq in ('p02') and test1 in('010') Then 1 Else 0 End)) into pz10   ,

SUM((CASE When pq in ('p02') and test1 in('012') Then 1 Else 0 End)) into pz11   ,

SUM((CASE When pq in ('p02') and test1 in('013') Then 1 Else 0 End)) into pz12   ,

SUM((CASE When pq in ('p02') and test1 in('014') Then 1 Else 0 End)) into pz13   ,

SUM((CASE When pq in ('p02') and test1 in('015') Then 1 Else 0 End)) into pz14   ,

SUM((CASE When pq in ('p02') and test1 in('016') Then 1 Else 0 End)) into pz15   ,

,

,

SUM((CASE When pq in ('p03') and test1 in('001') Then 1 Else 0 End)) into pz01a  ,

SUM((CASE When pq in ('p03') and test1 in('002') Then 1 Else 0 End)) into pz02a  ,

SUM((CASE When pq in ('p03') and test1 in('003') Then 1 Else 0 End)) into pz03a  ,

SUM((CASE When pq in ('p03') and test1 in('004') Then 1 Else 0 End)) into pz04a  ,

SUM((CASE When pq in ('p03') and test1 in('005') Then 1 Else 0 End)) into pz05a  ,

SUM((CASE When pq in ('p03') and test1 in('006') Then 1 Else 0 End)) into pz06a  ,

SUM((CASE When pq in ('p03') and test1 in('007') Then 1 Else 0 End)) into pz07a  ,

SUM((CASE When pq in ('p03') and test1 in('008') Then 1 Else 0 End)) into pz08a  ,

SUM((CASE When pq in ('p03') and test1 in('009') Then 1 Else 0 End)) into pz09a  ,

SUM((CASE When pq in ('p03') and test1 in('010') Then 1 Else 0 End)) into pz10a  ,

SUM((CASE When pq in ('p03') and test1 in('012') Then 1 Else 0 End)) into pz11a  ,

SUM((CASE When pq in ('p03') and test1 in('013') Then 1 Else 0 End)) into pz12a  ,

SUM((CASE When pq in ('p03') and test1 in('014') Then 1 Else 0 End)) into pz13a  ,

SUM((CASE When pq in ('p03') and test1 in('015') Then 1 Else 0 End)) into pz14a  ,

SUM((CASE When pq in ('p03') and test1 in('016') Then 1 Else 0 End)) into pz15a  ,

,

,

SUM((CASE When pq in ('p04') and test1 in('001') Then 1 Else 0 End)) into pz01ab ,

SUM((CASE When pq in ('p04') and test1 in('002') Then 1 Else 0 End)) into pz02ab ,

SUM((CASE When pq in ('p04') and test1 in('003') Then 1 Else 0 End)) into pz03ab ,

SUM((CASE When pq in ('p04') and test1 in('004') Then 1 Else 0 End)) into pz04ab ,

SUM((CASE When pq in ('p04') and test1 in('005') Then 1 Else 0 End)) into pz05ab ,

SUM((CASE When pq in ('p04') and test1 in('006') Then 1 Else 0 End)) into pz06ab ,

SUM((CASE When pq in ('p04') and test1 in('007') Then 1 Else 0 End)) into pz07ab ,

SUM((CASE When pq in ('p04') and test1 in('008') Then 1 Else 0 End)) into pz08ab ,

SUM((CASE When pq in ('p04') and test1 in('009') Then 1 Else 0 End)) into pz09ab ,

SUM((CASE When pq in ('p04') and test1 in('010') Then 1 Else 0 End)) into pz10ab ,

SUM((CASE When pq in ('p04') and test1 in('012') Then 1 Else 0 End)) into pz11ab ,

SUM((CASE When pq in ('p04') and test1 in('013') Then 1 Else 0 End)) into pz12ab ,

SUM((CASE When pq in ('p04') and test1 in('014') Then 1 Else 0 End)) into pz13ab ,

SUM((CASE When pq in ('p04') and test1 in('015') Then 1 Else 0 End)) into pz14ab ,

SUM((CASE When pq in ('p04') and test1 in('016') Then 1 Else 0 End)) into pz15ab ,

...

from test

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值