本帖最后由 cgx117 于 2011-01-20 16:37:31 编辑

解决方案 »

  1.   

    看不到图,sum应该是不需要nvl的,对于null的数据sum函数不予累加,上面的nvl多余了
      

  2.   

    不是的各位朋友,就是说plsql执行以后,会出现标题和下面一个为空的记录,
    我想要的是只有标题,没有那个空记录,这里不支持图片,着急啊,不知道各位朋友明白不?
      

  3.   

    上面的正解,sum count 等函数,是自动过滤空值的。
    至于为什么结果为空,没图没真相,只能猜一下,可能是结果集为空,或结果集中,这个字段值为空。
    楼主最好把sum去掉,看一下明细数据是什么情况吧。
      

  4.   


    TBD.f_frequency  的值为空?要是sum的话 就不会统计 空的值
      

  5.   

    楼主的意思是不是 如果没有数据 就只显示标题 不显示空行啊
    sum是肯定要返回一行的,无论结果有没有
    空行就空行,你在程序里处理一下就行啊 为什么这么在意这个呢?
      

  6.   

    应该是按条件select出0条记录,自然也就没有sum的值了
      

  7.   

    我懂楼主的意思,昨天我才给公司员工讲了这个需要注意。我们在Java程式中,对于比如select sum(col) col from tab where id=?.这样的查询,当条件id的值在tab中不存在事,查询时有结果集的,只是一个空的值,那么在Java程式中就要注意此类情况,if(rs.nect()){ } 这样的话,此类情况会进入if判断,因此,需要考虑这类情况逻辑是否正确!处理办法:加上group by 语句。SELECT SUM(TBD.f_frequency)
      FROM TB_BAS_DISASTERFREQUENCYP TBD
     WHERE SUBSTR(TO_CHAR(TBD.f_date, 'yyyy-MM-dd'), 1, 4) IN ('2009', '2010')
       AND SUBSTR(TO_CHAR(TBD.f_date, 'yyyy-MM-dd'), 6, 2) IN ('02')
       AND TBD.f_Disastercode = '1'
       AND SUBSTR(TBD.f_area, 1, 6) = '110000' 
    GROUP BY SUBSTR(TO_CHAR(TBD.f_date, 'yyyy-MM-dd'), 1, 4),SUBSTR(TO_CHAR(TBD.f_date, 'yyyy-MM-dd'), 6, 2),TBD.f_Disastercode,SUBSTR(TBD.f_area, 1, 6)
      

  8.   

    如果记录为空,group by也没用的
      

  9.   

    SQL> select sum(1) from dual where 1=0;
     
        SUM(1)
    ----------
     
    SQL> 
    聚合函数一定返回行???
      

  10.   

    你在程序里取得getrecordcount试试,看结果是1还是0 肯定是1的
      

  11.   

    在command窗口执行看不出效果,其实是有一行的,
    SUM(1)
    ----------SQL> 
    没看到------和SQL>之间有空白吗?那就是空行
    不信你可以在sql窗口执行,就明显了
      

  12.   

    count是肯定会返回行。
    sum不是的
      

  13.   


    一定会的!
    SQL> select nvl(sum(0), 0) from dual where 1 <> 1;
     
    NVL(SUM(0),0)
    -------------
                0
      

  14.   

    上层有错误,minitoy说的对,sum不一定会有返回空行。select count(1), nvl(sum(0), 0) from dual where 1 <> 1 group by 1;
    NVL(SUM(0),0)
    -------------
      

  15.   

    其实这个不用解决吧
    你不要只是看工具的sql文执行结果,
    那个只是为了让你看的方便而已
    你用程序执行sql文,然后取结果看看,这个是不会有问题的
      

  16.   

    试了下,的确如paddy所说的一样.
    在没有group by子句时,即使不存在满足条件行也返回一行空值,加了group by子句就无返回了.
    感觉跟bug一样
      

  17.   

    select sum(1) from dual where 1=0;select sum(1) from dual where 1=0 group by 1;比较一下结果就能明白了。
      

  18.   

    学习了
    额滴个神,我刚做查询的时候也遇到这个问题
    我再最后面加了一句
    GROUP BY 1就可以了
    GROUP BY 什么貌似都可以,感觉就是用GROUP BY 来去除空记录用的
      

  19.   

    把f_frequency的空值转换为0处理,用NVL(f_frequency,0)
      

  20.   

    select * from (select sum(...) s from ..) where s is not null.
    lz的sql的效率