欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

oacale中用sun()函数产生的误差该怎么解决?

更新时间: 2014-01-05 02:10:38 责任编辑: Author_N1

 

oacale中用sun()函数产生的误差该如何解决??
我在写完sql运行完后发现在比率在三列中有明显的误差,
sql如下
select qu.AREANAME,count(distinct(dt.ELEVID)),nvl(sum(sg.kr),0),nvl(sum(sg.kr)/count
       (dt.ELEVID),0),nvl(sum(sg.gz),0),nvl(sum(sg.gz)/count(dt.ELEVID),0),nvl(sum(sg.zl),0),
       nvl(sum(sg.zl)/count(dt.ELEVID),0) 
               from (select CREATETIME, sum(case when urgentstatus=1 or urgentstatus=2 then 1 else 0 end) kr,
                    sum(case when urgentstatus=0 or urgentstatus=3 then 1 else 0 end) gz,
                    count(0) zl,ELEVATORID from elev_accident 
                     where to_char(createtime,'yyyy-mm')= '2013-04'
                    group by ELEVATORID,CREATETIME
                    ) sg 
                      right join ELEV_ELEVATORINFO dt on dt.ELEVID= sg.ELEVATORID
                      right join ELEV_AREA qu on qu.AREACODE=dt.AREACODE
                           where dt.state=1 AND to_char(dt.createtime,'yyyy-mm')<='2013-04'
                                group by qu.AREANAME
                                    order by nvl(sum(sg.zl)/count(dt.ELEVID),0) desc

运行结果如下[img=http://][/img]

无奈啊,图片插不进来,那就有吧问题说一下吧,nvl(sum(sg.kr)/count(dt.ELEVID),0),nvl(sum(sg.gz)/count(dt.ELEVID),0),nvl(sum(sg.zl)/count(dt.ELEVID),0) 所的出来的数据有错误,但是kr,gz,zl,和count(dt.elevid)没有错误,求解
--参考方法--
很明显,nvl(sum(sg.kr), 0), nvl(sum(sg.gz), 0),nvl(sum(sg.zl), 0),count(distinct(dt.ELEVID)),这几个都是针对单个表,数据肯定是准确的。
nvl(sum(sg.kr)/count(dt.ELEVID),0),nvl(sum(sg.gz)/count(dt.ELEVID),0),nvl(sum(sg.zl)/count(dt.ELEVID),0) 这几个都是跨表取字段,sg是左表,dt是右表,而你采用的是右外连接,所以有这样的情况:右表存在的数据,在左表中不存在,这样以来,数据自然不准确了。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:10:38
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6562/
本文WWW.DOC100.NET DOC100.NET版权所有。