比如
给个sysdate.
要求已sysdate前6个月的数据.

解决方案 »

  1.   


    create table t1 (d_date date,d_count number);insert into t1 values (date'2012-01-01',100);
    insert into t1 values (date'2012-01-02',200);
    insert into t1 values (date'2012-01-08',300);
    insert into t1 values (date'2012-02-19',100);
    insert into t1 values (date'2011-12-01',100);
    insert into t1 values (date'2011-11-01',100);
    insert into t1 values (date'2011-09-01',100);
    select a.c1 月份,nvl(sum(b.d_count),0) 数量 from
    (SELECT to_char(ADD_MONTHS(sysdate,-LEVEL),'yyyy-mm') AS c1
        FROM DUAL
       CONNECT BY LEVEL <= 6) a left join t1 b on a.c1=to_char(b.d_date,'yyyy-mm')
    group by a.c1
    order by a.c1
         月份     数量
    --------------------------------
    1 2011-09 100
    2 2011-10 0
    3 2011-11 100
    4 2011-12 100
    5 2012-01 600
    6 2012-02 100
      

  2.   

    -LEVEL改为-(LEVEL-1)就可以了select a.c1 月份,nvl(sum(b.d_count),0) 数量 from
    (SELECT to_char(ADD_MONTHS(sysdate,-(LEVEL-1)),'yyyy-mm') AS c1
        FROM DUAL
       CONNECT BY LEVEL <= 6) a left join t1 b on a.c1=to_char(b.d_date,'yyyy-mm')
    group by a.c1
    order by a.c1
      

  3.   

    sum改为count即可select a.c1 月份,nvl(count(b.d_count),0) 数量 from
    (SELECT to_char(ADD_MONTHS(sysdate,-(LEVEL-1)),'yyyy-mm') AS c1
        FROM DUAL
       CONNECT BY LEVEL <= 6) a left join t1 b on a.c1=to_char(b.d_date,'yyyy-mm')
    group by a.c1
    order by a.c1     月份     数量
    --------------------------------
    1 2011-10 0
    2 2011-11 1
    3 2011-12 1
    4 2012-01 3
    5 2012-02 1
    6 2012-03 0