在查询的时候我用
select t.id,(case t.people_sum when null then 0 when 0 then 0 else nvl(t.execmoney,0)/t.people_sum end) as "人均金额" from myTable .查出来后人均金额竟然还有为空的,这是为什么呢,正常的话应该没有为空才对吧,因为我已经用case把people_sum为空设成了0,又用nvl(t.execmoney,0)把execmoney也设成了0。可怎么还有空的呢,难道与case的执行顺序有关么?
select t.id,(case t.people_sum when null then 0 when 0 then 0 else nvl(t.execmoney,0)/t.people_sum end) as "人均金额" from myTable .查出来后人均金额竟然还有为空的,这是为什么呢,正常的话应该没有为空才对吧,因为我已经用case把people_sum为空设成了0,又用nvl(t.execmoney,0)把execmoney也设成了0。可怎么还有空的呢,难道与case的执行顺序有关么?
解决方案 »
- oracle中的4个问题
- oracle 百分求解。。高手来。。HELP
- 数据库连接类型
- 这个数据文件竟然大到了10G
- toad 7.4,oracle 10G,load procedure 出错
- 本地数据库的存储过程怎么去调远程数据库中的函数呢?
- 请高手数据库导入导出错误
- 如何取得局域网内所有Oracle的数据库服务器?
- 请问:oracle9i(或8i)数据库的字段有没有自动产生流水号的功能 ?
- Oracle Rman错误 ORA-17629:/ORA-17627:/ ORA-01017:
- 在oracle中,子查询的效率高,还是连接查询的效率高。
- OracleForm应用程序无线网络访问很慢!!!
因为t.people_sum有为null的情况,如果null做除数,所以为空,你去掉t.people_sum,就知道了
(case
when people_sum>0 then nvl(t.execmoney,0)/t.people_sum
else 0
end) as "人均金额"
from myTable;
你的除数为0啊,这个语句有问题吧,实在要这样就试试
下面这个
select t.id,
nvl(t.execmoney,0)/nvl(t.people_sum,0) as "人均金额"
from myTable .
FROM MYTABLE;
select t.id,decode(t.people_sum,0,0,null,0,nvl(t.execmoney,0)/t.people_sum) as "人均金额" from myTable t
(CASE T.PEOPLE_SUM WHEN 0 THEN 0
ELSE NVL((NVL(T.EXECMONEY,0)/T.PEOPLE_SUM),0))
"人均金额" from myTable;
SELECT t.id,
(CASE
WHEN t.people_sum IS NULL THEN
0
WHEN t.people_sum = 0 THEN
0
ELSE
nvl(t.execmoney, 0) / t.people_sum
END) AS "人均金额"
FROM myTable