本帖最后由 leo_ka 于 2012-02-17 12:49:09 编辑

解决方案 »

  1.   

    固定列的行列转换,还稍微容易写点,但是很繁琐,可参考:
    http://topic.csdn.net/u/20120130/16/ed748c60-8967-4232-ab45-4cb387bb790c.html
      

  2.   

    其实比较繁琐,假设你字段名是:月份,费用Select '费用' As "类型",
      SUM(Case 月份 When '01' Then "费用" Else 0 End) As "一月",
      SUM(Case 月份 When '02' Then "费用" Else 0 End) As "二月",
      ...
      SUM(Case 月份 When '12' Then "费用" Else 0 End) As "十二月"
    From 表
      

  3.   

    试试decode函数吧
    --假设表名tb1  2个字段名 月份:mon  费用:price
    select ' ','10','11','费用差' from dual
    union all
    select '费用',sum(decode(mon,'10',price,0)) November,sum(decode(mon,'11',price,0)) December,
           sum(decode(mon,'11',price,0)-decode(mon,'10',price,0)) n_d 
    from tb1
      

  4.   


    Select '费用' 类型,
      Sum(Nvl(Case 月份 When  '01' Then 费用 Else 0 End,0)) as 一月,
      Sum(Nvl(Case 月份 When  '02' Then 费用 Else 0 End,0)) as 二月,
      Sum(Nvl(Case 月份 When  '03' Then 费用 Else 0 End,0)) as 三月,
      ...
      Sum(Nvl(Case 月份 When  '12' Then 费用 Else 0 End,0)) as 十二月,
    From MonthSum
      

  5.   

    可以用存储过程解决,思路如下:
    1. 创建一个临时表;
    2. 通过游标先取到月份;
    3. 游标遍历时用月份为条件,按月统计,并Insert到临时表中;
    4. 游标循环结束,返回临时表的结果集。
      

  6.   

    只是计算差,没有必要转换啊……
    tb你的表名……
    select sum(decode(月份,11, 费用,10,-费用,0) from tb
      

  7.   

    select sum(decode(月份,11, 费用,10,-费用,0)) from tb
      

  8.   

    select  月份,费用 - nvl(lag(费用, 1) over (order by 月份),0) diff from tb;
    这样不就可以嘛。。