例如:课程表courseid   kecheng1   英语2   化学3   数学4   语文考试成绩表gradeid xuehao kecheng_id chengji1  110       1                 662  110        2                883  110       3                 984  110       4                 995  111     ................................................................学生表studentid   xuehao   student_name1     110       张三2     111..............我要实现成如下:student_name   xuehao      英语   化学   数学   语文张三                 110           66        88        98         99....................................................................................

解决方案 »

  1.   

    select t.student_name,
           t.xuehao,
           max(decode(t.kecheng,'英语',t.chengji)) '英语',
           max(decode(t.kecheng,'化学',t.chengji)) '化学',
           max(decode(t.kecheng,'数学',t.chengji)) '数学',
           max(decode(t.kecheng,'语文',t.chengji)) '语文'
    from
    (select s.student_name,s.xuehao,c.kecheng,g.chengji
    from student s
    left join grade g on s.xuehao=g.xuehao
    left join course c on s.kecheng_id=c.id) t
    group by student_name,xuehao差不多就这样了
      

  2.   

    [Q]如何实现行列转换 
    [A]1、固定列数的行列转换 
    如 
    student subject grade 
    --------------------------- 
    student1 语文 80 
    student1 数学 70 
    student1 英语 60 
    student2 语文 90 
    student2 数学 80 
    student2 英语 100 
    …… 
    转换为 
    语文 数学 英语 
    student1 80 70 60 
    student2 90 80 100 
    …… 
    语句如下: 
    select student,sum(decode(subject,'语文', grade,null)) "语文", 
    sum(decode(subject,'数学', grade,null)) "数学", 
    sum(decode(subject,'英语', grade,null)) "英语" 
    from table 
    group by student