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

请问一个关于合计的有关问题

2012-03-04 
请教一个关于合计的问题现在有两个表,一个是部门表,一个预算表表结构如下select*fromtd_dep//部门表depIDd

请教一个关于合计的问题
现在有两个表,一个是部门表,一个预算表表结构如下
select   *   from   td_dep   //部门表
depID       depName
1               生产部
2               办公室
3               质检站

select   *   from   td_pay     //预算表
payID             payName         payDate               fee_money           bankroll_money     depid
1                     报出车费       2007-01-02         100.50                 200.5                       1
2                     报招待费       2007-01-04         50                         100                           2
3                     报柴油费       2007-02-24         500                       1000                         1
4                     报柴油费       2007-03-03         200                       1000                         1
5                     报出车费       2007-04-04         50                         100                           1
6                     报党建费       2007-05-06         50                         500                           1
7                     报出车费       2007-05-15         100                       100                           1

现在我要做一个查询,查询3月至5月生产部的预算使用情况并要做出每个月的小计以及每个月从一月到本的合计,查询结果如下:
payid                       payname         payDate         fee_money         bankroll_money       depname
1                               报出车费       2007-01-02         100.50                 200.5                 生产部
本月小计                                                                   100.5                   200.5                  


一月至本月合计                                                       100.5                   200.5
3                               报柴油费       2007-02-24         500                       1000                   生产部
本月小计                                                                   500                       1000                  
一月至本月合计                                                       600.5                   1200.5
4                               报柴油费       2007-03-03         200                       1000                   生产部
本月小计                                                                   200                       1000                  
一月至本月合计                                                       800.5                   2200.5
5                               报出车费       2007-04-04         50                         100                     生产部
本月小计                                                                   50                         100
一月至本月合计                                                       850.5                   2300.5
6                               报党建费       2007-05-06         50                         500                     生产部
7                               报出车费       2007-05-15         100                       100                     生产部


本月小计                                                                   150                       600                  
一月至本月合计                                                       1000.5                 2900.5


请问这样的SQL语句怎么写?
万分感谢!!!!

[解决办法]
用union all
或者考察group by rollup()可行吗?
[解决办法]
在分析函数里找一找,估计有适用的
[解决办法]
group by rollup就可以实现的
[解决办法]
显示顺序有点不对,但结果是对的 ... 试试看~~~

===========================sql=========================================

select decode(yy.payid|| ' ', ' ', '本月小计 ',yy.payid|| ' ') as payid,
yy.payname,
tt.paydate,
tt.sum_fee_money,
tt.sum_bankroll_money,
yy.depName,
tt.ym
from (
select grouping_id(to_char(tp.payDate, 'yyyymm '),tp.payDate),
tp.payDate,
to_char(tp.payDate, 'yyyymm ') as ym,
sum(tp.fee_money) as sum_fee_money,
sum(tp.bankroll_money) as sum_bankroll_money
from td_dep td,
td_pay tp
where td.depID = tp.depid
and td.depName = '生产部 '
group by rollup(to_char(tp.payDate, 'yyyymm '),tp.payDate)
)tt
,
(select *
from td_dep td,
td_pay tp
where td.depID = tp.depid
and td.depName = '生产部 '
)yy
where tt.payDate = yy.payDate(+)
and tt.ym > = '200703 '
and tt.ym <= '200705 '
and tt.ym is not null

union all

select '一月至本月合计 ',
' ',
null,
max(all_fee_money) as all_fee_money,
max(all_bankroll_money) as all_bankroll_money,
' ',
zz.ym
from (
select to_char(tp.payDate, 'yyyymm ') as ym,
sum(tp.fee_money) over(order by tp.payDate) as all_fee_money,
sum(tp.bankroll_money) over(order by tp.payDate) as all_bankroll_money
from td_dep td,
td_pay tp
where td.depID = tp.depid
and td.depName = '生产部 '
)zz
where zz.ym > = '200703 '
and zz.ym <= '200705 '
group by zz.ym
order by 7;


==========================result=======================================


PAYID PAYNAME PAYDATE SUM_FEE_MONEY SUM_BANKROLL_MONEY DEPNAME YM
---------------------------------------- ---------------- ----------- ------------- ------------------ ------------ ------
4 报柴油费 3/3/2007 200 1000 生产部 200703
一月至本月合计 800.5 2200.5 200703


本月小计 200 1000 200703
5 报出车费 4/4/2007 50 100 生产部 200704
一月至本月合计 850.5 2300.5 200704
本月小计 50 100 200704
6 报党建费 5/6/2007 50 500 生产部 200705
7 报出车费 5/15/2007 100 100 生产部 200705
一月至本月合计 1000.5 2900.5 200705
本月小计 150 600 200705

10 rows selected

热点排行