现在有两个表,一个是部门表,一个预算表表结构如下
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语句怎么写?
万分感谢!!!!
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语句怎么写?
万分感谢!!!!
或者考察group by rollup()可行吗?
上面查询结果写多了,都1月和2月的数据不要,正确的查询结果如下:
payid payname payDate fee_money bankroll_money depname
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
刚刚才搞Oracle,对group by rollup不熟悉
万分感谢!!!!!!!!
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 nullunion allselect '一月至本月合计',
'',
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 20070510 rows selected
谢谢mantisXF以及所有回复我问题的大虾!!