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 小类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那样的数据,怎么实现阿?
假设表名为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
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 科目
-------------------- -------------------- -------------------- ---------- --------------------------------------------------------------------------------
大类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