select 定单号,sum(decode(帐目类型,1,费用,0)) 帐目类型1,sum(decode(帐目类型,2,费用,0)) 帐目类型2,...,sum(decode(帐目类型,n,费用,0)) 帐目类型n from your_table group by 定单号;

解决方案 »

  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 from tablename group by 订单号;
    要做到账目类型动态增加,一个sql语句可能是实现不了的,需要用存储过程了
      

  2.   

    declare cursor cu00
    select 帐目类型 from 表名 group by 帐目类型;
    declare cursor cu0
    select 定单号 from 表名 group by 定单号;
    declare cursor cu1
    select 定单号,帐目类型,sum(费用) from 表名 where 定单号 = :group by 定单号,帐目类型
    for cu3 in cu00 loop
      --用动态sql创建临时表
    end for;
    for cu in cu0 loop
      for cu2 in cu1(cu0.定单号) loop
        --用动态语句插入临时表   
      end loop;
    end loop;
    给个思路不知行不行 :-)
      

  3.   

    create procedure get
    as
    str varchar2(100);
    cursor t1_sor is
    select 定单号 from table_name group by 定单号;
    cursor t2_sor(v_定单号 varchar2) is
    select 帐目类型,sum(费用) 费用 from table_name where 定单号=v_定单号 group by 帐目类型;
    begin
    --dbms_output.put('定单号');
    for v1_sor in t1_sor loop
    dbms_output.put(v1_sor.定单号);
    for v2_sor in t2_sor(v1_sor.定单号) loop
    dbms_output.put(v1_sor.v2_sor.费用||' ');
    end loop;
    dmbs_output.put_line(' ');
    end loop;
    end;
    /
      

  4.   

    beckhambobo(beckham)
    你的东西看不蛮明白,能说清楚点吗?
    解释下每个语句
      

  5.   

    如果象你说的帐目类型是动态的,那么用一个sql是无法解决的。 
    所以用的存储过程create procedure...。
    游标t1_sor是取定单号,
    游标t2_sor是根据每个定单号取每帐目的费用。
    然后把取出的数据在sql*plus中打印出(dbms_output.put)。