这是我的查看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
答案 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
代替它是否足够?或者整个查询是否需要重写?