select e.job,count(decode(e.deptno,10,e.deptno)) dept_10,count(decode(e.deptno,20,e.deptno)) dept_20,
count(decode(e.deptno,30,e.deptno)) dept_30,count(decode(e.deptno,40,e.deptno)) dept_40
from emp e,dept d
where e.deptno = d.deptno
group by job
/我想将上面的 0变为空值 就是如果是0的话就什么都不显示 ,下面这么写怎么不对  
select e.job,decode(count(decode(e.deptno,10,e.deptno)),0,null) dept_10,count(decode(e.deptno,20,e.deptno)) dept_20,
count(decode(e.deptno,30,e.deptno)) dept_30,count(decode(e.deptno,40,e.deptno)) dept_40
from emp e,dept d
where e.deptno = d.deptno
group by job
/

解决方案 »

  1.   

    没设置好如果不等于0那怎么显示
    改成decode(count(decode(e.deptno,10,e.deptno)),0,null,count(decode(e.deptno,10,e.deptno))) dept_10
      

  2.   

    decode的用法:
    decode(parm1, res1, parm2,res2,...,defualt)
    你上面的用法不对,因为你只是制定了一个判断条件,而没有制定不符合这个条件的时候,值是多少?、
    改为:decode(count(...), 0,  null,count(...))
      

  3.   


    --楼主的需求可以这样 count的话始终是会返回一个值的 不会为null
    select e.job,
           sum(decode(e.deptno,10,1,null)) dept_10,
           sum(decode(e.deptno,20,1,null)) dept_20,
           sum(decode(e.deptno,30,1,null)) dept_30,
           sum(decode(e.deptno,40,1,null)) dept_40
    from emp e,dept d
    where e.deptno = d.deptno
    group by jobJOB          DEPT_10    DEPT_20    DEPT_30    DEPT_40
    --------- ---------- ---------- ---------- ----------
    SALESMAN           1                     4
    CLERK              1          2          1
    PRESIDENT          1
    MANAGER            1          1          1
    ANALYST                       2
      

  4.   

    case when field = 0 then null else field end;
      

  5.   

    恩这样是正确的 但是 结果里面 dept10占那么多 ,字段能在一行显示出来吗,为什么字段变成两列了 
      

  6.   

    nullif( count(decode(e.deptno,10,e.deptno)) ,0 ) 这样就是 
    如果count(decode(e.deptno,10,e.deptno)) =0 的话为null