求教数据值为null时进行SUM的问题

逍遥散人 2010-04-14 12:15:50
我的语句如下:

select nvl(sum(age),1) buxiang from consult_info r, BM_PHY_QUESTIONTYPE t,BM_PHY_QUESTIONTYPE s where (consult_category='03' or consult_category='04') and substr(r.question_classification,0,2)=t.dictid and substr(r.question_classification,0,4)=s.dictid and to_char(consult_time,'yyyy-mm-dd') between '2010-04-07'and '2010-04-07'

age字段中值为null,则b1为null而不是为1,如果把group by去掉,则b1就变成1。问题在于由于要分组求和,因此,不能去掉group by,请教有何解决办法没有?谢谢!
...全文
258 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangren 2010-04-14
  • 打赏
  • 举报
回复
没有描述清楚,表结构
另外,单从语句来看,字段列上最好不要使用函数,可用在右边的列值上去考虑,
如果该列上有索引,则可能使用不上,除非建立函数索引。
逍遥散人 2010-04-14
  • 打赏
  • 举报
回复
唉,搞定了,语句没有问题,是用户那面要求变了,导致条件值发生了变化,还没来得及通知我。我还在家里闷头试呢。郁闷啊!
Adebayor 2010-04-14
  • 打赏
  • 举报
回复
问题描述的还不是很清楚
最好的办法是 贴下表结构 测试数据 和你想要的结果
逍遥散人 2010-04-14
  • 打赏
  • 举报
回复
忘了说了,sum(age)必须带条件的,比如:sum(case age>0 and age<=25 then 1 else 0 end),因为用要求按照年龄分段进行统计
逍遥散人 2010-04-14
  • 打赏
  • 举报
回复
都试过了,只要有group by 就变成null,去掉group by 就可以,郁闷啊
fingerfox 2010-04-14
  • 打赏
  • 举报
回复
sum(nvl(age,0)) 不行么...
iqlife 2010-04-14
  • 打赏
  • 举报
回复
nvl(sum(age),1)
不管AGE的值是什么得到的都不会是NULL,

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧