SELECT
     IPADDRESS ,
     count(case STATUS when 0 then 1 else 0 end) as suc,
     count(case STATUS when not 0 then 1 else 0 end) as ero,
     COLLECTTIME 
FROM
     P_TABLE 这个第一个count 是统计这个字段=0的有多少个,第2个 是统计这个字段不等于0的有多少个 但是 不等于0的这个语法是错误的 报错。问如何解决?

解决方案 »

  1.   

    SELECT
      IPADDRESS ,
      count(case when STATUS=0 then 1 else 0 end) as suc,
      count(case when STATUS!=0 then 1 else 0 end) as ero,
      COLLECTTIME  
    FROM
      P_TABLE
    group by IPADDRESS,COLLECTTIME;
      

  2.   

    SELECT
      IPADDRESS ,
      count(case when STATUS=0 then 1 else 0 end) as suc,
      count(case when STATUS<>0 then 1 else 0 end) as ero,
      COLLECTTIME   
    FROM
      P_TABLEoracle里没有!=
      

  3.   

    SQL> select * from v$version;BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
    PL/SQL Release 10.2.0.1.0 - Production
    CORE    10.2.0.1.0      Production
    TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - ProductionSQL> select ename from emp where empno=7788;ENAME
    ----------
    SCOTTSQL> select ename from emp where empno!=7788;ENAME
    ----------
    SMITH
    ALLEN
    WARD
    JONES
    MARTIN
    BLAKE
    CLARK
    KING
    TURNER
    ADAMS
    JAMESENAME
    ----------
    FORD
    MILLER已选择13行。SQL>奇闻…………
      

  4.   

    count(*)统计所有的记录数
    count(field_name)统计所有非null记录
      

  5.   

    如果是SUM,把不想计入的设置为0是可以的,
    如果COUNT,必须把不想计数的值设置为null
    SELECT
      IPADDRESS ,
      count(case when STATUS=0 then 1 else null end) as suc,
      count(case when STATUS!=0 then 1 else null end) as ero,
      COLLECTTIME  
    FROM
      P_TABLE
    group by IPADDRESS,COLLECTTIME;另外,可使用decode
    SELECT
      IPADDRESS ,
      count(decode(STATUS,0,1,null)) as suc,
      count(decode(sign(STATUS),0,null,1)) as ero,
      COLLECTTIME  
    FROM
      P_TABLE
    group by IPADDRESS,COLLECTTIME;
      

  6.   


    SELECT
      IPADDRESS,
      count(case  when STATUS=0  then 1 else 0 end) as suc,
      count(case  when STATUS<>0  then 1 else 0 end) as ero,
      COLLECTTIME  
    FROM
      P_TABLE 
    group by IPADDRESS,COLLECTTIME
      

  7.   

    SELECT
      IPADDRESS ,
      count(case  when STATUS=0 then 1 else 0 end) as suc,
      count(case  when STATUS!=0 then 1 else 0 end) as ero,
      COLLECTTIME  
    FROM
      P_TABLE  
      

  8.   

    说一下 。你们说的都不好使。我已经试过很多了。<>  !=  都报错的。不是这个报错 是你把字段写在那报错。但是还是感谢你们。我最后解决的 就是用count(*)-sum(case 0)的  得出了 不等于0的