首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

SOS,复杂的查询语句,该如何实现

2011-12-19 
SOS,复杂的查询语句,该怎么实现?1,原始数据构造了一个试图,里面有以下的字段和数据。科目大类科目小类险种

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

热点排行