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成绩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值