表结构:
  出生日期  性别
  2006-07-01 女
  2006-07-04 男
  2006-07-06 男
  2005-07-01 男
  2005-07-01 女
  2007-07-01 男
  2007-07-01 女
  2007-07-01 女
  -------
得到下面的结构:
  年份  总男  总女  出生男  出生女
  2005   1     1      1      1
  2006   3     2      2      1
  2007   4     4      1      2注释:
2006年的总男=2006年出生男+2005年的总男 

解决方案 »

  1.   

    关注下cube等一类函数的使用
    1.  自动汇总函数rollup,cube,
    2.  rank 函数, rank,dense_rank,row_number
    3.  lag,lead函数
    4.  sum,avg,的移动增加,移动平均数
    5.  ratio_to_report报表处理函数
    6.  first,last取基数的分析函数
      

  2.   

    SQL> select * from t;BDAY       S
    ---------- --
    2004-02-04 女
    2004-07-03 女
    2006-03-05 女
    2007-05-06 女
    2007-08-03 男
    2007-01-03 男
    2007-10-25 男
    2004-01-19 男已选择8行。SQL> select a.y,sum(nvl(b.s1,0)) over(order by a.y) t1,sum(nvl(b.s2,0)) over(order by a.y) t2, nvl(b.s1,0) s1,nvl(b.s2,0) s2 from (select to_char(2000+rownum) y from t connect by rownum<9) a, (select to_char(bday,'yyyy') y,sum(decode(s,'男',1,0)) s1 ,sum(decode(s,'男',0,1)) s2 from t group by to_char(bday,'yyyy')) b where a.y=b.y(+);Y       T1   T2   S1   S2
    ----- ---- ---- ---- ----
    2001     0    0    0    0
    2002     0    0    0    0
    2003     0    0    0    0
    2004     1    2    1    2
    2005     1    2    0    0
    2006     1    3    0    1
    2007     4    4    3    1
    2008     4    4    0    0已选择8行。
      

  3.   

    select a.year as 年份,
    (select count(*) from 表 where 出生日期<=a.year||'-12-31' and 性别='男' ) as 总男,
    (select count(*) from 表 where 出生日期<=a.year||'-12-31' and 性别='女' ) as 总女,
    (select count(*) from 表 where 出生日期<=a.year||'-12-31' and 出生日期>=a.year||'-01--1'  and 性别='男' ) as 出生男,
    (select count(*) from 表 where 出生日期<=a.year||'-12-31' and 出生日期>=a.year||'-01--1'  and 性别='女' ) as 出生女 from (select distinct strsub(to_char(出生日期,'YYYY-MM-DD'),1,4) year from 表 ) a