SQL语句:把统计结果按照特定的列值转换成多列

要求:查询每个老师所带毕业设计的汇总情况,毕业设计学生分本科、专科,院外、院内,要求得到的结果形式如下:

教师名 院内本科 园内专科 院外本科 院外专科 合计

 

相关的表有:学生表(包含学生层次)、教师表(教师名)、学生课题表(学生教师对应关系以及院内院外信息)。

 

SQL语句如下:

 

select

    teacher.teacher_name,ifnull(c1.c,0) v1,ifnull(c2.c,0) v2,ifnull(c3.c,0) v3,ifnull(c4.c,0) v4,
    (ifnull(c1.c,0)+ifnull(c2.c,0)+ifnull(c3.c,0)+ifnull(c4.c,0)) sum

 from teacher

 left outer join
 (

      select

           teacher_id,count(*) c

      from

           taskbook,student 
      where

            taskbook.taskbook_inner_task='院内' and degree_id>1 and student.student_id=taskbook.student_id
      group by

            teacher_id

  ) c1 using(teacher_id) 

 left outer join
 (

       select

            teacher_id,count(*) c

       from

            taskbook,student
        where

             taskbook.taskbook_inner_task='院内' and degree_id=1 and student.student_id=taskbook.student_id
        group by

             teacher_id

 ) c2 using(teacher_id)

left outer join
(

       select

             teacher_id,count(*) c

       from

             taskbook,student
        where

              taskbook.taskbook_inner_task='院外' and degree_id>1 and student.student_id=taskbook.student_id
        group by

               teacher_id

) c3 using(teacher_id)

left outer join
(

         select

                 teacher_id,count(*) c

          from

                 taskbook,student
          where

                  taskbook.taskbook_inner_task='院外' and degree_id=1 and student.student_id=taskbook.student_id
          group by teacher_id

) c4 using(teacher_id);

 

类似的问题有:在一个表中存储了学生的所有选修课程成绩,典型的列有:学号、课程号、成绩。需要得到的结果如下:

学号 课程1成绩 课程2成绩 课程3成绩

你可能感兴趣的:(SQL语句:把统计结果按照特定的列值转换成多列)