表T里有字段a,a的值可能是1,2,3,4,5中的一个,请问,如何在只遍历一次表T的情况下,得到a=1的行数与a=2的行数的差。例如  a=1 的行数是10,a=2的行数是3,如何在只遍历一次数据表T的情况下得到10减3等于7

解决方案 »

  1.   

    select sum(decode(a,1,1,2,-1,0)) from t
      

  2.   


    -- 不知道这样行不行:
    select a, abs(count(decode(a,1,1,0))-count(decode(a,2,1,0))) as cnt
    from table_name
    where a=1 or a=2
    group by a;
      

  3.   


    --只想到这样:
    SELECT Abs(rn1-rn2) FROM 
    (SELECT ROWNUM rn1,t.* FROM t) t1,
    (SELECT ROWNUM rn2,t.* FROM t)t2
    WHERE t1.a=1 AND t2.a=2;
      

  4.   

    你这样试试:select sum(decode(empno,7369,1,7654,-1,0)) from emp WHERE empno IN(7369,7654);结果是0,而我这里行号相减是是4
    SELECT Abs(rn1-rn2) FROM 
    (SELECT ROWNUM rn1,emp.* FROM emp ) a,
    (SELECT ROWNUM rn2,emp.* FROM emp ) b
    WHERE a.empno=7369 AND b.empno=7654;
      

  5.   

    SQL> select count(*) from emp where deptno=10;
     
      COUNT(*)
    ----------
             3
     
    SQL> select count(*) from emp where deptno=20;
     
      COUNT(*)
    ----------
             5
      
    SQL> select sum(decode(deptno,20,1,10,-1,0)) from emp;
     
    SUM(DECODE(DEPTNO,20,1,10,-1,0
    ------------------------------
                                 2
     
    SQL>
      

  6.   

    如果a上有索引最好是select sum(decode(a,1,1,2,-1,0)) from t where a in (1,2)
      

  7.   

    看来今天我是被整晕了~~
    该喝点维他命ABCD了
    ⊙﹏⊙b汗