一直以来,大师们就告诉我们Oracle中的NULL与0是不一样的,什么区别啊。到我实践的时候,早忘了那些告诫。
昨天做个报表,客户说怎么把明细相加和汇总行的值不一样呀。想了想,怎么可能呀,我写的报表有个习惯,为了赶时间,通常是把汇总行直接union all select sum() from (明细)。这么写应该是正常的呀,怎么可能明细相加会不等于汇总行的值。
限制明细表的数据,手工加了下,再用sum(),果然数据不一致,疯了,怎么可能。突然想起了null值的问题。加了nvl(字段名,0),之后,在汇总,数据正常了。要是这样我的所有报表可能都需要检查了,于是就把源头找出,把空的全部改为0,这样就好办了。
后来,再试了一下四则运算,结果都是null,大于,小于和等于则都不理会null。