如何在不使用case的情况下创建一个小而简单的sql

时间:2015-12-29 10:28:40

标签: oracle oracle-sqldeveloper

这是我的查看sql命令。我想在不使用案例的情况下将其缩小。

select a.nrc_typ_cd,a.nrc_typ_nm,a.a as "No of IMIS Source",b.b as "No of New Source",c.c as "No of Source Marked Bad",d.d as "No of Source with Lat/Long",e.e as "No of Source without Lat/Long" from
(select nrc_typ_cd,nrc_typ_nm,count(nrc_cd) as a from tableview_dtl  where imis_nrc_cd is not null and act_flg='A' group by nrc_typ_cd,nrc_typ_nm ) a,
(select nrc_typ_cd,count(nvl(nrc_cd,0)) as b from tableview_dtl  where imis_nrc_cd is null and act_flg='A' group by nrc_typ_cd ) b,
(select nrc_typ_cd,count(nrc_cd) as c from tableview_dtl   where act_flg='I' group by nrc_typ_cd ) c,
(select nrc_typ_cd,count(nrc_cd) as d from tableview_dtl   where lat_val_degree is not null and long_val_degree is not null and act_flg='A' group by nrc_typ_cd) d,
(select nrc_typ_cd,count(nvl(nrc_cd,0)) as e from tableview_dtl   where lat_val_degree is null and long_val_degree is null and act_flg='A' group by nrc_typ_cd) e
where a.nrc_typ_cd=b.nrc_typ_cd
and  a.nrc_typ_cd=c.nrc_typ_cd
and  a.nrc_typ_cd=d.nrc_typ_cd
and  a.nrc_typ_cd=e.nrc_typ_cd
order by a.nrc_typ_cd

1 个答案:

答案 0 :(得分:0)

(这更像是一个扩展的评论,而不是答案。)

所以这是想要的代码版本?

select nrc_typ_cd,nrc_typ_nm
    ,count(case when imis_nrc_cd is not null and act_flg='A' then nrc_cd else null end) a
    ,count(case when imis_nrc_cd is not null and act_flg='A' then nvl(nrc_cd, 0) else null end) b
    ,count(case when act_flg='I' then nrc_cd else null end) c
    ,count(case when lat_val_degree is not null and long_val_degree is not null and act_flg='A' then nrc_cd else null end) d,
    ,count(case when lat_val_degree is null and long_val_degree is null and act_flg='A' then nvl(nrc_cd, 0) else null end) e,
from tableview_dtl
group by nrc_typ_cd,nrc_typ_nm
order by a.nrc_typ_cd;

它似乎比新版本更简单,更短,更快。重要的是完全解释为什么这个明显的解决方案之前是不够的  人们可以合理地提出替代方案。

根据评论,这个版本是不可接受的,因为“我的PL给出了指令”。 (“PL”是什么意思;项目负责人?)PL有什么作用  针对CASE?我想不出有理由要求某人重写一些内容以避免CASE

使用DECODE代替它是否足够?或者整个查询是否需要重写?