本帖最后由 qiuyufeifei 于 2009-12-21 19:27:47 编辑

解决方案 »

  1.   

    enddate在数据库里面的数据类型是varchar2?不是date?
      

  2.   

    你的写法有问题:
    select 
          a.endcode as 结案方式, 
          count(*) as 件数, 
          round(100*ratio_to_report(a.endcode该换成count(*)) over (),2) as 占比 
    from (select endcode from tszx_anli_manage where enddate >='20090101' and enddate <='20091218') a 
    group by rollup (a.endcode) 
    order by a.endcode;
    因为你算的不是件数所占的百分比
      

  3.   

    你的写法有问题: 
    select 
          a.endcode as 结案方式, 
          count(*) as 件数, 
          round(100*ratio_to_report(a.endcode该换成count(*)) over (),2) as 占比 
    from (select endcode from tszx_anli_manage where enddate >='20090101' and enddate <='20091218') a 
    group by rollup (a.endcode) 
    order by a.endcode; 
    因为你算的是件数所占的百分比,第二个问题rollup做了两次统计.所以正确的写法是:
    select 
          a.endcode as 结案方式, 
          count(*) as 件数, 
          round(100*ratio_to_report(count(*)) 
    over (partition by grouping(a.endcode)),2) as 占比 
    from (select endcode from tszx_anli_manage where enddate >='20090101' and enddate <='20091218') a 
    group by rollup (a.endcode) 
    order by a.endcode; 
      

  4.   


    万分感谢,ratio_to_report这个用的不多,所以不是很熟悉
    谢谢了,
    分不多,不好意思啊
      

  5.   


    万分感谢,ratio_to_report这个用的不多,所以不是很熟悉
    谢谢了,
    分不多,不好意思啊
      

  6.   


    遗留数据库,日期全用 yyyyMMdd 这样的字符串不过这样也可以判断 大小,不影响使用