select 班级,姓名,sum(decode(subject,'语文', grade,null)) "语文",
sum(decode(subject,'数学', grade,null)) "数学",
sum(decode(subject,'英语', grade,null)) "英语"
from table
group by 班级,姓名

解决方案 »

  1.   

    最好是用函数,否则如果科目数不定就没法用SQL语句了
      

  2.   

    sum(decode(subject,'语文', grade,null)) "语文"-----请教一下,这个是什么意思?
      

  3.   

    if subject='语文' then
       return grade
    else
       return nullsum()是将()内的数值累加
      

  4.   

    sum(decode(subject,'语文', grade,null)) "语文"sum --求和decode(subject,'语文', grade,null) --判断subject  如果是 '语文' 求语文的成绩                                   --不是'语文' 赋予 null
      

  5.   

    create table user_score (class varchar2(100),name varchar2(100),subject varchar2(50), grade varchar2(3));
    insert into user_score values('135','南岸','math','87');
    insert into user_score values('135','南岸','english','93');
    insert into user_score values('135','哈纳哈','english','77');
    insert into user_score values('135','哈纳哈','math','66');select class,name,decode(subject,'math', grade,null),
    decode(subject,'english', grade,null)
    from user_score后面加 group by 就出错?
      

  6.   

    grade是varchar呀,也能sum?还是出错
    谁能帮我测试下,见表(没建主见)和数据上面都有了
      

  7.   

    --try:select class,name,sum(decode(subject,'math', to_number(grade),0)),
    sum(decode(subject,'english', to_number(grade),0))
    from user_score
    group by class,name;
      

  8.   

    不是阿,我的grade有些是小数比如93.5,有些是字母阿,比如‘B’
      

  9.   

    支持 qiaozhiwei(乔) !还有,group by 不能用别名!
    据我所知,只有order by可以用别名。
      

  10.   

    select 班级,姓名,语文,数学,外语 from 
    (
        select distinct 班级,姓名,班级||姓名 id from 表
    ) a,
    (
        select 班级,姓名,成绩,班级||姓名 id from 表 where 科目='语文'
    ) b,
    (
        select 班级,姓名,成绩,班级||姓名 id from 表 where 科目='数学'
    ) c,
    (
        select 班级,姓名,成绩,班级||姓名 id from 表 where 科目='外语'
    ) d
    where a.id=b.id(+) and a.id=c.id(+) and a.id=d.id(+);
      

  11.   

    select a.班级,a.姓名,b.语文,c.数学,d.外语 from 
    (
        select distinct 班级,姓名,班级||姓名 id from 表
    ) a,
    (
        select 班级,姓名,成绩 语文,班级||姓名 id from 表 where 科目='语文'
    ) b,
    (
        select 班级,姓名,成绩 数学,班级||姓名 id from 表 where 科目='数学'
    ) c,
    (
        select 班级,姓名,成绩 外语,班级||姓名 id from 表 where 科目='外语'
    ) d
    where a.id=b.id(+) and a.id=c.id(+) and a.id=d.id(+);
      

  12.   

    select a.class,b.name,a.数学,b.外语,c.语文
    from 
    (select class,name,decode(subject,数学, grade,null) as 数学
    from table1
    ) a,
    (select class,name,decode(subject,'外语', grade,null)as 外语
    from table1
    ) b,
    (select class,name,decode(subject,'语文', grade,null) as 语文
    from table1
    ) c
    where a.class=b.class and a.class=c.class
      and a.name=b.name and a.name=c.name
      

  13.   

    nanci(☆精灵☆)  的解决办法应该是可行的,但是我觉得这个问题应该用函数去实现,这样可能动态的生成语句。因为科目有可能变化,这样每次科目变化的时候都需要去修改SQL,这个代价也太大了一点吧
      

  14.   

    nanci(☆精灵☆)  的解决办法还是有问题,会有很多重复数据
      

  15.   

    如果列固定的话我还是支持
    qiaozhiwei(乔)的方法如果列动态的话.我认为还是写过程好些.那样很灵活,不用去更改前台的程序代码了.
      

  16.   

    liuyi8903(甜脆夹心) 列是固定的,但是现在是乔的方法解决不了非数字的问题。
    nanci 的方法,会有很多雍余数据出来,