现有一张表(设表名为T),可能包含如下的数据:部门名称     月份     支出类型     支出金额
部门A       1       内部         10.00
部门A       1       外部         15.00
部门A       2       外部         20.00
部门B       3       内部         25.00
…………希望查询结果为如下格式:
                  1月       2月       3月       4月       ……合计
部门A    内部    10.00    20.00    30.00    40.00       300.00
部门A    外部      5.00    10.00    15.00    20.00       150.00
部门A    合计     15.00    30.00    45.00    60.00       450.00
………………小弟实在是水平有限,一点思路都没有,还请各位高手指点一二,不胜感激

解决方案 »

  1.   


    select 部门名称,支出类型,
      sum(decode(月份,'1',月份,0)) as 1月,
      sum(decode(月份,'2',月份,0)) as 2月,
      sum(decode(月份,'3',月份,0)) as 3月,
      sum(decode(月份,'4',月份,0)) as 4月,
      sum(decode(月份,'5',月份,0)) as 5月,
      sum(decode(月份,'6',月份,0)) as 6月,
      sum(decode(月份,'7',月份,0)) as 7月,
      sum(decode(月份,'8',月份,0)) as 8月,
      sum(decode(月份,'9',月份,0)) as 9月,
      sum(decode(月份,'10',月份,0)) as 10月,
      sum(decode(月份,'11',月份,0)) as 11月,
      sum(decode(月份,'12',月份,0)) as 12月,
      sum(月份) as 合计
    from t
    group by 部门名称,支出类型
      

  2.   

    我是新手,不好意思,刚写错了
    create table t 
       (bm  varchar(20),
        yf  char(2),
        zc  varchar(20),
        je NUMBER);
    insert into t
    (select '部门A',1,'内部',10 from DUAL)
    union all
    (select '部门A',1,'外部',15 from DUAL)
    union all
    (select '部门A',2,'内部',1 from DUAL)
    union all
    (select '部门B',1,'内部',10 from DUAL)
    union all
    (select '部门B',2,'内部',10 from DUAL)
    union all
    (select '部门B',3,'内部',10 from DUAL);select nvl(bm,'合计'),nvl(zc,'小计'),
      sum(decode(yf,1,je,0)) as "1月",
      sum(decode(yf,2,je,0)) as "2月",
      sum(decode(yf,3,je,0)) as "3月",
      sum(decode(yf,4,je,0)) as "4月",
      sum(decode(yf,5,je,0)) as "5月",
      sum(decode(yf,6,je,0)) as "6月",
      sum(decode(yf,7,je,0)) as "7月",
      sum(decode(yf,8,je,0)) as "8月",
      sum(decode(yf,9,je,0)) as "9月",
      sum(decode(yf,10,je,0)) as "10月",
      sum(decode(yf,11,je,0)) as "11月",
      sum(decode(yf,12,je,0)) as "12月",
      sum(je) as "合计"
    from t
    group by rollup(bm,zc);