各位有碰到过这种情况吗?SELECT
 COUNT(*) AS CASE_COUNT
, tb004.FILD5
FROM tb006 
, tb004 
WHERE tb006.FILD1 = '1'
AND tb006.FILD2 = '11'
AND tb006.FILD3 = '223'
AND tb006.FILD4 = '00'AND tb006.FILD1 = tb004.FILD1
AND tb006.FILD2 = tb004.FILD2
AND tb006.FILD3 = tb004.FILD3
AND tb006.FILD4 = tb004.FILD4
AND tb006.FILD5 = tb004.FILD5
group by tb004.FILD5有数据的时候结果很正常,没数据的时候它不返回0,返回空,我用decode转都没用,求教~~~
能帮我我返回0吗?
分不多,昨天押宝全输了。

解决方案 »

  1.   

     Nvl(COUNT(*),0) AS CASE_COUNT
      

  2.   

    这个方法我也试过了,跟decode一样,转不过来
      

  3.   

    是不是受group by 影响啊?
      

  4.   

    当然是受group by 影响了,
    如果是0的话,就别加group by了
      

  5.   

    楼主有这个tb004.FILD5分组,如果分组没有记录肯定是null的,试着把这个去掉,前边查询的时候也不要这个tb004.FILD5,返回的应该就是0了。
      

  6.   

    我觉得楼主可以来看看我发的这个帖子,已经被别人解决了,希望对你有帮助。
    http://topic.csdn.net/u/20101025/09/752283dc-d89a-410e-9db6-b3d6bd7f80d2.html?303153174
      

  7.   


    SELECT
     COUNT(nvl(tb004.FILD5,0)) AS CASE_COUNT
    , nvl(tb004.FILD5,0)
    FROM tb006  
    , tb004  
    WHERE tb006.FILD1 = '1'
    AND tb006.FILD2 = '11'
    AND tb006.FILD3 = '223'
    AND tb006.FILD4 = '00'AND tb006.FILD1 = tb004.FILD1
    AND tb006.FILD2 = tb004.FILD2
    AND tb006.FILD3 = tb004.FILD3
    AND tb006.FILD4 = tb004.FILD4
    AND tb006.FILD5 = tb004.FILD5
    group by nvl(tb004.FILD5,0)
      

  8.   

    --如果你的需求是像我的例子的话
    SQL> select dname,count(ename)
      2  from emp
      3  ,dept
      4  where emp.deptno=dept.deptno
      5  group by dname;DNAME          COUNT(ENAME)
    -------------- ------------
    ACCOUNTING                3
    RESEARCH                  5
    SALES                     6SQL> ed
    已写入 file afiedt.buf  1  select dname,count(ename)
      2  from emp
      3  ,dept
      4  where emp.deptno(+)=dept.deptno
      5* group by dname
    SQL> /DNAME          COUNT(ENAME)
    -------------- ------------
    ACCOUNTING                3
    NANCHANG                  0
    OPERATIONS                0
    RESEARCH                  5
    jiujiang                  0
    SALES                     6
    nanchang                  0已选择7行。
    --你可以用下面的方法试试
    SELECT
     COUNT(*) AS CASE_COUNT
    , tb004.FILD5
    FROM tb006  
    , tb004  
    WHERE tb006.FILD1 = '1'
    AND tb006.FILD2 = '11'
    AND tb006.FILD3 = '223'
    AND tb006.FILD4 = '00'AND tb006.FILD1 = tb004.FILD1
    AND tb006.FILD2 = tb004.FILD2
    AND tb006.FILD3 = tb004.FILD3
    AND tb006.FILD4 = tb004.FILD4
    AND tb006.FILD5(+) = tb004.FILD5
    group by tb004.FILD5
      

  9.   

    7楼说的方法在能检索到数据的情况下是能判断的,但如果没有数据,count就用不了了。
      

  10.   

    可以啊。你用sum(case when   )的话没有数据就是0啊,我那个帖子里面他们发的方法我试过了,确实将满足条件个数为0的id的count(0)显示为0,或者用别人说的外连接也可以吧
      

  11.   

    谈谈我的理解吧,当你以tb004.FILD5分组时,就相当于你把你的检索结果,除以tb004.FILD5来得到每一组
    的值。但是,当tb004.FILD5为空时,也就是说你在以一个空来分组,那结果就相当于一个数除以0,是一个无限值。这个时候你无论怎么count都是没有意义的不知道这样理解对不对。
      

  12.   

    SELECT
     tb004.FILD5,
     sum(case when  tb006.FILD1 = tb004.FILD1
             AND tb006.FILD2 = tb004.FILD2
             AND tb006.FILD3 = tb004.FILD3
             AND tb006.FILD4 = tb004.FILD4
             AND tb006.FILD5 = tb004.FILD5  then 1 else 0 end)CASE_COUNT
    FROM tb006  , tb004
    where tb006.FILD1 = '1'
           AND tb006.FILD2 = '11'
           AND tb006.FILD3 = '223'
           AND tb006.FILD4 = '00'  
    group by tb004.FILD5
    不知道行不行
      

  13.   

    回14楼,只要有一条数据满足
                 tb006.FILD1 = '1'
           AND tb006.FILD2 = '11'
           AND tb006.FILD3 = '223'
           AND tb006.FILD4 = '00' ,它的分组就能实现,哪怕分组结果都是零  tb004.FILD5  num
    -------------- ------------
    00 0
    01 0
    77 0
    02 0但是,当你一条数据都没有的时候,是count不出来的。
    所以你的方法还是很有效的!!