我想在sql中根据年月统计几个数据的个数:select  ny,count(a),count(b),sum(c)  from a_1 where  (to_char(rq,'yyyymm) between '200101' and '200801' ) group by ny我想直接得到在不同年月下的数据count(a)、count(b)、sum(c);我的问题:
     我想得到的count(b)数据是>=0的数据,不包括空数据项和0
     
     也是就说我想得到的count(b)的数据个数中,数据都是>=0      在oracle中有没有这种用法??这么实现???

解决方案 »

  1.   

    可以。任何语言都可以的count(b)去掉 空数据项和0 ;
    假设你的b的字段类型是varchar2;
    count()的时候会去掉null的,现在只需要去除0count(b,'0',null,1)
      

  2.   

    字段b是number(5,2)型数据count(b,'0',null,1)什么意思?替换count(b)执行后说是“参数无效”
      

  3.   

    按你逻辑写的,没测试,你试试。select  ny,count(a),SUM(CASE WHEN B IS NULL THEN 0 WHEN B<=0 THEN 0 ELSE 1 EHD),sum(c)  from a_1 where  (to_char(rq,'yyyymm) between '200101' and '200801' ) group by ny 
      

  4.   

    错了count(b)改成SUM(CASE WHEN B IS NULL THEN 0 WHEN B<=0 THEN 0 ELSE 1 END)end写成ehd了
      

  5.   

    写错了,不好意思
    count( decode(b,'0',null,1) )
      

  6.   

    感谢“山芋”和“白日依山尽,黄河入海流。”,问题解决了,十分感谢!!!
    用的count(CASE WHEN B IS NULL THEN 0 WHEN B <=0 THEN 0 ELSE 1 END) 解决的。
    对count( decode(b,'0',null,1) )数据不是很准确,还有点疑问,关键是不知道四个参数的用法