select count(case when y.yearsold>10 and y.yearsold<20 then 1 else 0 end), 
       count(case when y.yearsold>20 and y.yearsold<30 then 1 else 0 end), 
       count(case when y.yearsold>30 and y.yearsold<40 then 1 else 0 end)
from  (select sysdate-to_date(t.birth,'yyyymmdd) yearsold from tablename t) y

解决方案 »

  1.   

    select count(case when y.yearsold>10 and y.yearsold<20 then 1 else 0 end), 
           count(case when y.yearsold>20 and y.yearsold<30 then 1 else 0 end), 
           count(case when y.yearsold>30 and y.yearsold<40 then 1 else 0 end)
    from  (select sysdate-to_date(t.birth,'yyyymmdd') yearsold from tablename t) y刚才少个引号
      

  2.   

    SELECT SUM(DECODE(TRUNC((TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(BIRTH,'YYYY'))/10),1,1,0)),
    SUM(DECODE(TRUNC((TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(BIRTH,'YYYY'))/10),2,1,0)),
    SUM(DECODE(TRUNC((TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(BIRTH,'YYYY'))/10),3,1,0))
     FROM TBNAME;
      

  3.   

    bzszp(SongZip) ( )
    的方法比较好,还是用这个吧!我的,效率差点
      

  4.   

    SQL> SELECT SUM(DECODE(trunc((to_char(sysdate,'YYYYmmdd')-birth)/10),1,1,0)),
      2  SUM(DECODE(trunc((to_char(sysdate,'YYYYmmdd')-birth))/10),2,1,0)),
      3  SUM(DECODE(trunc((TO_CHAR(sysdate,'YYYYmmdd')-birth))/10),3,1,0))
      4  FROM haha; 
    SUM(DECODE(trunc((to_char(sysdate,'YYYYmmdd')-birth))/10),2,1,0)),
    *
    ERROR 位于第 2 行:
    ORA-00909: 无效的自变量数
    这是怎么回事呢??
      

  5.   

    BIRTH是什么类型的?
    TO_CHAR(BIRTH,'YYYY')
      

  6.   

    是varchar2(8)
    create table haha(
    id   varchar2(8),
    name varchar2(8),
    birth varchar2(8)
    );
    insert into haha(id,name,birth) values('001','AAA','19791021');
    ...
      

  7.   

    还有就是decode的用法我在网上找了,和您的用法好象不是很一样啊
    谢谢解答!!!
      

  8.   

    birth->substr(birth,1,4)怎么不一样?
      

  9.   

    您的
    SUM(DECODE(TRUNC((TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(BIRTH,'YYYY'))/10),2,1,0)),
    被我换为
    sum(decode(trunc((to_char(sysdate,'YYYYmmdd')-birth))/10),2,1,0)),
    这样的形式,其他的两个sum也是一样
    请指教 2,1.0 这几个参数是什么含义啊?
      

  10.   

    SUM(DECODE(TRUNC((TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(BIRTH,'YYYY'))/10),2,1,0)),
    被我换为
    sum(decode(trunc((to_char(sysdate,'YYYYmmdd')-substr(birth,1,4)))/10),2,1,0)),decode(n,2,1,0) --表示当n=2时 表达式返回1,否则返回0
      

  11.   

    sum(decode(floor(trunc(sysdate,'yyyy')-trunc(birth,'yyyy')/10),1,1,0)) "10-20岁",
    sum(decode(floor(trunc(sysdate,'yyyy')-trunc(birth,'yyyy')/10),2,1,0)) "20-30岁",
    sum(decode(floor(trunc(sysdate,'yyyy')-trunc(birth,'yyyy')/10),3,1,0)) "30-40岁"