现在有两个表,一个是部门表,一个预算表表结构如下
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语句怎么写?
万分感谢!!!!

解决方案 »

  1.   

    用union all
    或者考察group by rollup()可行吗?
      

  2.   

    能写出具体的SQL语句吗?
    上面查询结果写多了,都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
      

  3.   

    group by rollup就可以实现的
      

  4.   

    各位大虾,能写出SQL语句给我吗?
    刚刚才搞Oracle,对group by rollup不熟悉
    万分感谢!!!!!!!!
      

  5.   

    显示顺序有点不对,但结果是对的 ... 试试看~~~===========================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 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
      

  6.   

    前一段时间忙别的事去了
    谢谢mantisXF以及所有回复我问题的大虾!!