1,原始数据
构造了一个试图,里面有以下的字段和数据。科目大类     科目小类      险种类别    月份      金额大类1        小类11        险种1       1月       100
大类1        小类11        险种1       2月       200
大类1        小类11        险种2       2月       200
大类1        小类12        险种1       1月       100
大类1        小类12        险种1       2月       200
大类2        小类21        险种2       1月       100
大类2        小类21        险种2       2月       200
大类2        小类22        险种3       1月       100
大类2        小类22        险种3       2月       200
2,报表样式:我的报表的格式下面那样的:
本期:当前月份对应的所有金额
本年累计:当年对应的所有金额科目               险种1         险种2         险种3           险种4
              本期 本年累计  本期 本年累计  本期 本年累计  本期 本年累计大类1         400  600       200  200       
    小类11    200  300       200  200   
    小类12    200  300          
    
大类2                        200  300       200  300
    小类21                   200  300       
    小类22                                  200  300
    3,目标数据我只要把1的数据转换成下面的格式,就可以实现2的报表了。科目     险种类别    本期      本年累计大类1    险种1       400       600
大类1    险种2       200       200
小类11   险种1       200       300
小类11   险种2       200       200
小类12   险种1       200       300
大类2    险种2       200       300
大类2    险种3       200       200
小类21   险种2       200       300
小类22   险种3       200       300
问题:把1的数据转换成像3那样的数据,怎么实现阿?

解决方案 »

  1.   

    你的表结构有错误啊,没有年份的,这张表只能做当年的了,应该加个YEAR或者月份里这样写200701
    假设表名为a,字段如下
    科目大类kmdl     科目小类kmxl      险种类别xzlb    月份month 年份year      金额amt想实现表3的效果
    select cm.kmdl科目,cm.xzlb 险种类别,cm.本期,cy.本年类计
    from 
    (
    select kmdl,xzlb,sum(amt) 本期
    from a
    where month='1月' and year='2007
    group kmdl,xzlb
    ) cm,
    (
    select kmdl,xzlb,sum(amt) 本年累计
    from a
    where year='2007
    group kmdl,xzlb
    ) cyunion all
    select cm.kmxl,cm.xzlb ,cm.本期,cy.本年类计
    from 
    (
    select kmdl,kmxl,xzlb,sum(amt) 本期
    from a
    where month='1月' and year='2007
    group kmdl,kmxl,xzlb
    ) cm,
    (
    select kmdl,kmxl,xzlb,sum(amt) 本年累计
    from a
    where year='2007
    group kmdl,kmxl,xzlb
    ) cy
      

  2.   

    上面写错了
    select *
    from
    (
    select cm.kmdl科目,cm.xzlb 险种类别,cm.本期,cy.本年类计
    from 
    (
    select kmdl,xzlb,sum(amt) 本期
    from a
    where month='1月' and year='2007
    group kmdl,xzlb
    ) cm,
    (
    select kmdl,xzlb,sum(amt) 本年累计
    from a
    where year='2007
    group kmdl,xzlb
    ) cy
    where cm.kmdl=cy.kmdl and cm.xylb=cy.xylbunion all
    select cm.kmxl,cm.xzlb ,cm.本期,cy.本年类计
    from 
    (
    select kmdl,kmxl,xzlb,sum(amt) 本期
    from a
    where month='1月' and year='2007
    group kmdl,kmxl,xzlb
    ) cm,
    (
    select kmdl,kmxl,xzlb,sum(amt) 本年累计
    from a
    where year='2007
    group kmdl,kmxl,xzlb
    ) cy
    where 
    where cm.kmdl=cy.kmdl and cm.xylb=cy.xylb and cm.kmxl=cy.kmxl)ordey 科目
      

  3.   

    SQL> select * from reTest;科目大类             科目小类             险种类别             月份                                                                                   金额
    -------------------- -------------------- -------------------- ---------- --------------------------------------------------------------------------------
    大类1                小类11               险种1                1月                                                                                     100
    大类1                小类11               险种1                2月                                                                                     200
    大类1                小类11               险种2                2月                                                                                     200
    大类1                小类12               险种1                1月                                                                                     100
    大类1                小类12               险种1                2月                                                                                     200
    大类2                小类21               险种2                1月                                                                                     100
    大类2                小类21               险种2                2月                                                                                     200
    大类2                小类22               险种3                1月                                                                                     100
    大类2                小类22               险种3                2月                                                                                     2009 rows selectedSQL> 
    SQL> select 科目大类 as "科目",
      2         险种类别 as "险种类别",
      3         sum(decode(r1.月份,'2月',r1.金额,0)) as "本期",
      4         sum(金额) as "本年累计"
      5    from reTest r1
      6   group by 科目大类,险种类别
      7   union all
      8  select 科目小类 as "科目",
      9         险种类别 as "险种类别",
     10         sum(decode(r2.月份,'2月',r2.金额,0)) as "本期",
     11         sum(金额) as "本年累计"
     12    from reTest r2
     13   group by 科目小类,险种类别;科目                 险种类别                   本期   本年累计
    -------------------- -------------------- ---------- ----------
    大类1                险种1                       400        600
    大类1                险种2                       200        200
    大类2                险种2                       200        300
    大类2                险种3                       200        300
    小类11               险种1                       200        300
    小类11               险种2                       200        200
    小类12               险种1                       200        300
    小类21               险种2                       200        300
    小类22               险种3                       200        3009 rows selected