给定年份(如:2011),根据年份,查出2011年每个月的总数
显示结果为:
月份:     总数 
2011-01     100
2011-02     50
2011-03     30
.........
2011-12     0

解决方案 »

  1.   

    create table tb
    (
    id vachar(8),
    riqi date
    )
    select t1.riqi,count(tb.riqi)from (select '2011-'||lpad(rownum,2,'0') riqi from dual connect by rownum<=12) t1  left join tb
    on t1.riqi=substr(to_char(tb.riqi,'YYYY-MM-DD'),1,7) group by t1.riqi
    (select '2011-'||lpad(rownum,2,'0') riqi from dual connect by rownum<=12) 
    变更红色部分就可以用于别的年度
      

  2.   

    select 2011||substr(年月字段,xx,xx),count(*) from tablename group by substr(年月字段,xx,xx
      

  3.   

    额……最后少个order by t1.riqi ^_^ 
      

  4.   

    实测数据:CREATE TABLE T79
    (
        MyDate DATE,
        MyNum  NUMBER(4)
    );-- 无效数据
    INSERT INTO T79 VALUES(to_date('2010-01-01', 'YYYY-MM-DD'), 1);
    INSERT INTO T79 VALUES(to_date('2012-11-01', 'YYYY-MM-DD'), 11);
    -- 有效数据
    INSERT INTO T79 VALUES(to_date('2011-01-01', 'YYYY-MM-DD'), 1);
    INSERT INTO T79 VALUES(to_date('2011-01-03', 'YYYY-MM-DD'), 3);
    INSERT INTO T79 VALUES(to_date('2011-02-01', 'YYYY-MM-DD'), 2);
    INSERT INTO T79 VALUES(to_date('2011-02-04', 'YYYY-MM-DD'), 4);
    实测结果:
      

  5.   


    --假设表中日期格式都为YYYY-MM-DD
    WITH T1 AS(
        SELECT ADD_MONTHS(DATE'2010-12-01',LEVEL) AS t_date
        FROM DUAL CONNECT BY LEVEL <= 12
      ),T2 AS(SELECT date'2011-01-06' 时间 , 100 总数 FROM DUAL UNION ALL
              SELECT date'2011-01-11' 时间 , 200 总数 FROM DUAL UNION ALL
              SELECT date'2011-02-12' 时间 , 100 总数 FROM DUAL UNION ALL
              SELECT date'2011-03-19' 时间 , 400 总数 FROM DUAL UNION ALL
              SELECT date'2011-06-01' 时间 , 100 总数 FROM DUAL UNION ALL
              SELECT date'2011-08-09' 时间 , 540 总数 FROM DUAL UNION ALL
              SELECT date'2011-08-26' 时间 , 160 总数 FROM DUAL UNION ALL
              SELECT date'2011-10-12' 时间 , 109 总数 FROM DUAL
      )SELECT TO_CHAR(T1.t_date,'YYYY-MM') 日期,NVL(SUM(T2.总数),0) 总数
         FROM T1 LEFT JOIN T2 ON TO_CHAR(T1.t_date,'YYYY-MM') = TO_CHAR(T2.时间,'YYYY-MM')
        GROUP BY TO_CHAR(T1.t_date,'YYYY-MM')
        ORDER BY TO_CHAR(T1.t_date,'YYYY-MM')------------------------------------------------------------------------
             时间   总数
    1 2011-01 300
    2 2011-02 100
    3 2011-03 400
    4 2011-04 0
    5 2011-05 0
    6 2011-06 100
    7 2011-07 0
    8 2011-08 700
    9 2011-09 0
    10 2011-10 109
    11 2011-11 0
    12 2011-12 0