16:03:50 SQL> select * from test;NAME       KM                 CJ
---------- ---------- ----------
张三       语文               80
张三       数学               86
张三       英语               75
李四       语文               78
李四       数学               85
李四       英语               78已选择6行。已用时间:  00: 00: 00.47
16:03:55 SQL> select name,sum(decode(trim(km),'语文',cj,0)) 语文,
16:03:58   2  sum(decode(trim(km),'数学',cj,0)) 数学,
16:03:58   3  sum(decode(trim(km),'英语',cj,0)) 英语
16:03:59   4  from test group by name;NAME             语文       数学       英语
---------- ---------- ---------- ----------
李四               78         85         78
张三               80         86         75已用时间:  00: 00: 00.15
16:03:59 SQL>

解决方案 »

  1.   

    有多少科目就用多少的   sum(decode(trim(km),'英语',cj,0)) 英语
      

  2.   

    select name,max(decode(trim(km),'语文',cj,0)) 语文,  max(decode(trim(km),'数学',cj,0)) 数学,
     max(decode(trim(km),'英语',cj,0)) 英语
     from test group by name;
      

  3.   

    这个Sql语句我也会,如果科目不定怎么办?我要动态Sql语句
      

  4.   

    就用decode()或case when ... then ....
      

  5.   

    如果科目不定怎么办?dbms_sql is the right answer
    search in asktom.oracle.com
      

  6.   

    select name,sum(decode(trim(km),'语文',cj,0)) 语文,
     sum(decode(trim(km),'数学',cj,0)) 数学,
     sum(decode(trim(km),'英语',cj,0)) 英语
      ................
     from test group by name;
      

  7.   

    求动态sql语句,还望高手不吝赐教
      

  8.   

    为什么要在SQL语句中处理,在程序中解决此类问题不是很好吗,如果你是使用报表的话,99%的报表都可以实现交叉表功能的。
      

  9.   

    动态sql的例子:
    declare 
        strsql varchar2(200);
    begin
        strsql:='create sequence seq_name increment by 1 start with 1 maxvalue 99999999 nocycle cache 10';
        execute immediate strsql;
    end;
    /--动态建一序列
      

  10.   

    decode(trim(km),'数学',cj,0)  请问这句什么意思?decode 是用来干吗的?
      

  11.   

    如果科目不定,你就要借助别的工具了吧!一个sql语句应该是不能的吧,