select a.name,a.count1 '优秀' ,b.count2 '合格',c.count3 '不合格' from 
(select count(*) count1 from tablename where sysdate < datecol + 3 group by name) a,
(select count(*) count2 from tablename where sysdate >= datecol + 3 and sysdate < datecol +5 group by name) b,
(select count(*) count3 from tablename where sysdate >= datecol + 5 group by name) c
where a.name=b.name and a.name=c.name;
:)比较麻烦!

解决方案 »

  1.   

    楼上的我觉得有点问题,比如有三个人,每个人只有一个维修单,分别处在不合格,合格和良好三个档次,那由于abc三个语句中where子句的限制,造成每条语句分别查出一个名字。而最后由于where a.name=b.name and a.name=c.name;,造成查询结果为空
      

  2.   

    select name,sum(sign(1-abs(SYSDATE-RECEIVTIEM-4))) 合格, sum(SYSDATE-RECEIVTIEM-5) 不合格, sum(sign(3-sysdate-receivetime)) ) 优秀 from a
    group by name
      

  3.   

    漏了点东西
    select name,sum(sign(1-abs(SYSDATE-RECEIVTIEM-4))) 合格, sum(sign(SYSDATE-RECEIVTIEM-5)) 不合格, sum(sign(3-sysdate-receivetime)) ) 优秀 from a
    group by name
      

  4.   

    select name,sum(decode(sign(SYSDATE-RECEIVETIME-3),-1,1,0)) as '优秀',
    sum(decode(sign(SYSDATE-RECEIVETIME-3),1,(decode(sign(SYSDATE-RECEIVETIME-5),-1,1,0),0)) as '合格',
    sum(decode(sign(SYSDATE-RECEIVETIME-5),1,1,0)) as '不合格'
    from tbname
    group by name;
      

  5.   

    还是得用decode,稍微改改
    select name,sum(decode(sign(1-abs(SYSDATE-RECEIVTIEM-4)),1,1,0)) 合格, sum(decode(sign(SYSDATE-RECEIVTIEM-5),1,1,0)) 不合格, sum(decode(sign(3-sysdate-receivetime),1,1,0)) 优秀 from table
    group by name