本帖最后由 u012289444 于 2013-11-22 13:41:38 编辑

解决方案 »

  1.   

    给你个示意,select c_month,
           c_count,
        max(c_count) over (order by c_month rows between 1 preceding  and 1 preceding ),--last month
        max(c_count) over (order by c_month rows between 12 preceding  and 12 preceding )--去年同期
      from ()--使用外连接,保证每月比有数。--有了这些,至于想再怎么算都行了。
      

  2.   

    给你个例子吧。环比不晓得是什么意思。 同比估计就是跟去年的进行比较。。个人理解。
    select * from a
    model 
    return updated rows
    dimension by (yr,area_class)
    --one2 市辖  one3县域   依次类推  其他的几个都是同样的 
    measures (one1,0 one2,0 one3,two1,0 two2,0 two3,three1,0 three2,0 three3,qsh1,0 qsh2,0 qsh3,jm1,0 jm2,0 jm3,grid1,0 grid2,0 grid3)
    (
    --一产
    one2[any,'3']=round(decode(nvl(one1[cv(yr),'1'],0)+nvl(one1[cv(yr),'2'],0),0,0,one1[cv(yr),'3']*(nvl(one1[cv(yr),'1'],0))/(nvl(one1[cv(yr),'1'],0)+nvl(one1[cv(yr),'2'],0))),2),
    one3[any,'3']=round(decode(nvl(one1[cv(yr),'1'],0)+nvl(one1[cv(yr),'2'],0),0,0,one1[cv(yr),'3']*(nvl(one1[cv(yr),'2'],0))/(nvl(one1[cv(yr),'1'],0)+nvl(one1[cv(yr),'2'],0))),2),
    --二产 市辖和县域的实际数据
    two2[any,'3']=round(decode(nvl(two1[cv(yr),'1'],0)+nvl(two1[cv(yr),'2'],0),0,0,two1[cv(yr),'3']*(nvl(two1[cv(yr),'1'],0))/(nvl(two1[cv(yr),'1'],0)+nvl(two1[cv(yr),'2'],0))),2),
    two3[any,'3']=round(decode(nvl(two1[cv(yr),'1'],0)+nvl(two1[cv(yr),'2'],0),0,0,two1[cv(yr),'3']*(nvl(two1[cv(yr),'2'],0))/(nvl(two1[cv(yr),'1'],0)+nvl(two1[cv(yr),'2'],0))),2),
    ---三产的市辖县域数据
    three2[any,'3']=round(decode(nvl(three1[cv(yr),'1'],0)+nvl(three1[cv(yr),'2'],0),0,0,three1[cv(yr),'3']*(nvl(three1[cv(yr),'1'],0))/(nvl(three1[cv(yr),'1'],0)+nvl(three1[cv(yr),'2'],0))),2),
    three3[any,'3']=round(decode(nvl(three1[cv(yr),'1'],0)+nvl(three1[cv(yr),'2'],0),0,0,three1[cv(yr),'3']*(nvl(three1[cv(yr),'2'],0))/(nvl(three1[cv(yr),'1'],0)+nvl(three1[cv(yr),'2'],0))),2),qsh2[any,'3']=round(decode(nvl(qsh1[cv(yr),'1'],0)+nvl(qsh1[cv(yr),'2'],0),0,0,qsh1[cv(yr),'3']*(nvl(qsh1[cv(yr),'1'],0))/(nvl(qsh1[cv(yr),'1'],0)+nvl(qsh1[cv(yr),'2'],0))),2),
    qsh3[any,'3']=round(decode(nvl(qsh1[cv(yr),'1'],0)+nvl(qsh1[cv(yr),'2'],0),0,0,qsh1[cv(yr),'3']*(nvl(qsh1[cv(yr),'2'],0))/(nvl(qsh1[cv(yr),'1'],0)+nvl(qsh1[cv(yr),'2'],0))),2),jm2[any,'3']=round(decode(nvl(jm1[cv(yr),'1'],0)+nvl(jm1[cv(yr),'2'],0),0,0,jm1[cv(yr),'3']*(nvl(jm1[cv(yr),'1'],0))/(nvl(jm1[cv(yr),'1'],0)+nvl(jm1[cv(yr),'2'],0))),2),
    jm3[any,'3']=round(decode(nvl(jm1[cv(yr),'1'],0)+nvl(jm1[cv(yr),'2'],0),0,0,jm1[cv(yr),'3']*(nvl(jm1[cv(yr),'2'],0))/(nvl(jm1[cv(yr),'1'],0)+nvl(jm1[cv(yr),'2'],0))),2),grid2[any,'3']=round(decode(nvl(grid1[cv(yr),'1'],0)+nvl(grid1[cv(yr),'2'],0),0,0,grid1[cv(yr),'3']*(nvl(grid1[cv(yr),'1'],0))/(nvl(grid1[cv(yr),'1'],0)+nvl(grid1[cv(yr),'2'],0))),2),
    grid3[any,'3']=round(decode(nvl(grid1[cv(yr),'1'],0)+nvl(grid1[cv(yr),'2'],0),0,0,grid1[cv(yr),'3']*(nvl(grid1[cv(yr),'2'],0))/(nvl(grid1[cv(yr),'1'],0)+nvl(grid1[cv(yr),'2'],0))),2)
    );
    如果为同比 将cv(yr)替换成cv(yr)-1 就可以了。 其中 b表 可以使用with b  as ()子句来进行过滤数据。避免数据量大了。
      

  3.   


    select sysdate,
           to_char(sysdate, 'YYYY-MM') as 当月,
           to_char(add_months(sysdate, -1), 'YYYY-MM') as 上月,
           to_char(add_months(sysdate, -12), 'YYYY-MM') as 上年
      from dual;  /*
      结果
      SYSDATE     当月    上月    上年
      ----------- ------- ------- -------
      2013/12/9 1 2013-12 2013-11 2012-12
      
      连接查询也好嵌套查询也好,实现.
      */