SOS,复杂的查询语句,该怎么实现?
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那样的数据,怎么实现阿?
[解决办法]
你的表结构有错误啊,没有年份的,这张表只能做当年的了,应该加个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
) cy
union 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
[解决办法]
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月 200
9 rows selected
SQL>
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 300
9 rows selected