Oracle中数据库里有这么一张表Student
('学生姓名','老师姓名','评分项目','分值') 
********************* 
学生 老师 项目 评分 
Stu1 Tea1 x 5 
Stu1 Tea1 y 2 
Stu1 Tea1 z 3 
Stu1 Tea2 x 3 
Stu1 Tea2 y 2 
Stu1 Tea2 z 3 
Stu1 Tea3 x 5 
Stu1 Tea3 y 5 
Stu1 Tea3 z 3 
Stu2 Tea1 x 3 
Stu2 Tea1 y 4 
Stu2 Tea1 z 1 
Stu2 Tea2 x 3 
Stu2 Tea2 y 2 
Stu2 Tea2 z 4 
Stu2 Tea3 x 4 
Stu2 Tea3 y 4 
Stu2 Tea4 z 2 
********************* 我现在想通过查询语句出一报表,格式如下 ('学生姓名','老师姓名','评分项x分值','评分项y分值','评分项z分值') 
********************* 
学生 老师 评分x 评分y 评分z 
Stu1 Tea1 5 2 3 
Stu1 Tea2 3 2 3 
Stu1 Tea3 5 5 3 
Stu2 Tea1 3 4 1 
Stu2 Tea2 3 2 4 
Stu2 Tea3 4 4 2 
*********************
ps:项目的字段随着student记录的增加而动态增加!仅仅用查询不用临时表可以查出来吗?

解决方案 »

  1.   

    先自己顶一下!
    最好能直接一句select就出结果
      

  2.   

    WITH t AS 
         (select 'Stu1' s, 'Tea1' t, 'x' as p,5 f from dual
         union
         select 'Stu1' s, 'Tea1' t, 'y' p,2 f from dual
         union
         select 'Stu1' s, 'Tea1' t, 'u' p,3 f from dual
    union
         select 'Stu2' s, 'Tea2' t, 'u' p,3 f from dual
         ) 
    select s,t,
           max(case p
                   when 'x' then
                    f
                   else
                    null
               end) x,
           max(case p
                   when 'y' then
                    f
                   else
                    null
               end) y,
           max(case p
                   when 'u' then
                    f
                   else
                    null
               end) u
      from t
     group by s,t
         
      

  3.   


    select 学生姓名 学生,老师姓名 老师,
        sum(decode(评分项目,'x',分值,0)) 评分x,
        sum(decode(评分项目,'y',分值,0)) 评分y,
        sum(decode(评分项目,'z',分值,0)) 评分z
    from Student
    group by(学生姓名,老师姓名)
      

  4.   

    select 学生,老师,case 项目 when 'x' then sum(分值) end as 评分x,
    case 项目 when 'y' then sum(分值) end as 评分y,
    case 项目 when 'z' then sum(分值) end as 评分z
    from student group by (学生姓名,老师姓名) 
      

  5.   

    用上面各位的方法动态生成sql语句
      

  6.   

    select 学生姓名 学生,老师姓名 老师,
        sum(decode(评分项目,'x',分值,0)) 评分x,
        sum(decode(评分项目,'y',分值,0)) 评分y,
        sum(decode(评分项目,'z',分值,0)) 评分z
    from Student
    group by(学生姓名,老师姓名)
    4楼这个写的就可以!