sum(nvl(a,b))与nvl(sum(a),b)区别
(2012-11-28 20:26:30)
标签:
sumnvlit |
分类: UI |
在正常情况下,所有行的数据不全为空时:
Sql代码
- select
sum(nvl(1,1)) from dual ; - select
nvl( sum(1),1)from dual ;
select sum(nvl(1,1)) from dual ; select nvl(sum(1),1) from dual ;
在所有行数据都为空时:
Sql代码
- select
sum(nvl(null,1)) from dual ; - select
nvl( sum(null),1)from dual ;
select sum(nvl(null,1)) from dual ; select nvl(sum(null),1) from dual ;
当查不到数据时:
Sql代码
- select
sum(nvl(1,1)) from dual where1<>1; - select
nvl( sum(1),1)from dual where1<>1; - select
sum(nvl(null,1)) from dual where1<>1; - select
nvl( sum(null),1)from dual where1<>1;
select sum(nvl(1,1)) from dual where 1<>1; select nvl(sum(1),1) from dual where 1<>1; select sum(nvl(null,1)) from dual where 1<>1; select nvl(sum(null),1) from dual where 1<>1;
这是因为sum和nvl的异常处理不一样导致的。
当处理数据时,如果碰到没有数据(注意没有数据不是null)时,sum返回"空",而nvl返回"没有数据"。
所以,当sum在外面时,nvl先返回"没有数据",sum再对"没有数据"做处理,返回结果为"空"。
当sum在里面时,sum先对"没有数据"做处理,返回结果为"空",nvl再对nvl处理,返回结果为1。

加载中…