select sum(nvl2(DEL_DATE,0,1))/count(*) from a where to_char(input_date,'YYYYMMDD')>='20040101' and to_char(input_date,'YYYYMMDD')<='20040501';
大概思想是这样的,没有调试过!

解决方案 »

  1.   

    nvl2是自建的函数吧?可否利用ORACLE本身的函数就实现该功能呢
      

  2.   

    select sum(nvl2(DEL_DATE,0,1))/count(*) from a where to_char(input_date,'YYYYMMDD')>='20040101' and to_char(input_date,'YYYYMMDD')<='20040501';
    用这个试试
      

  3.   

    select sum(nvl(DEL_DATE,1))/count(*) from a where to_char(input_date,'YYYYMMDD')>='20040101' and to_char(input_date,'YYYYMMDD')<='20040501';
    用这个试试 不好意思刚才弄错了
      

  4.   

    我试了,好象NVL(a,b)中的参数a只能是数值型,怎么办?
      

  5.   

    nvl的参数也可以字符型的.a和b的类型需一致
      

  6.   

    nvl(你的varchar2类型的字段,'OK')   --如果字段为空,就用OK代替.