zsprt.TEST_DATE_OF_AMOUNT两个字段 date 和 金额, 
--算全年每个月的汇总金额, 但季末的那个月是为全季的累计金额
--例如 1,2,3 三个月,1,2 为当月的汇总金额,3月份 为1,2,3累计的金额 

解决方案 »

  1.   

    问题比较简单,以下SQL可以实现:--1.创建测试表
    create table tmp as
    select to_date('2017-01-01','yyyy-mm-dd') dtime, 100 money from dual union all
    select to_date('2017-01-05','yyyy-mm-dd') dtime, 200 money from dual union all
    select to_date('2017-02-01','yyyy-mm-dd') dtime, 400 money from dual union all
    select to_date('2017-02-08','yyyy-mm-dd') dtime, 500 money from dual union all
    select to_date('2017-03-01','yyyy-mm-dd') dtime, 100 money from dual union all
    select to_date('2017-03-11','yyyy-mm-dd') dtime, 200 money from dual union all
    select to_date('2017-03-21','yyyy-mm-dd') dtime, 300 money from dual union all
    select to_date('2017-04-01','yyyy-mm-dd') dtime, 100 money from dual union all
    select to_date('2017-05-01','yyyy-mm-dd') dtime, 100 money from dual union all
    select to_date('2017-06-01','yyyy-mm-dd') dtime, 100 money from dual union all
    select to_date('2017-07-01','yyyy-mm-dd') dtime, 100 money from dual union all
    select to_date('2017-08-01','yyyy-mm-dd') dtime, 100 money from dual union all
    select to_date('2017-09-01','yyyy-mm-dd') dtime, 100 money from dual union all
    select to_date('2017-10-01','yyyy-mm-dd') dtime, 100 money from dual union all
    select to_date('2017-11-01','yyyy-mm-dd') dtime, 100 money from dual union all
    select to_date('2017-12-01','yyyy-mm-dd') dtime, 100 money from dual;--2.SQL实现
    select a.dtime,decode(b.dtime,null,a.money,b.money) money
       from( select trunc(dtime,'mm')  dtime,sum(money) money from tmp group by trunc(dtime,'mm')) a
        left join(select dtime,money
                         from(select dtime,sum(money)over(partition by to_char(dtime,'q')) money,
                                               row_number()over(partition by to_char(dtime,'q')  order by trunc(dtime,'mm') desc) rn
                                     from tmp
                                  ) where rn = 1
                       )b
       on a.dtime = b.dtime