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
/
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
/
改成decode(count(decode(e.deptno,10,e.deptno)),0,null,count(decode(e.deptno,10,e.deptno))) dept_10
decode(parm1, res1, parm2,res2,...,defualt)
你上面的用法不对,因为你只是制定了一个判断条件,而没有制定不符合这个条件的时候,值是多少?、
改为:decode(count(...), 0, null,count(...))
--楼主的需求可以这样 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
如果count(decode(e.deptno,10,e.deptno)) =0 的话为null