日期:2014-05-16  浏览次数:20857 次

mysql查表记录合并
MYSQL数据表格式如下:每个学生有多个实验,
学号 姓名 实验代号 实验名称 实验签到打分 实验成绩
A A 1 实验1 X X
A A 2 实验2 X x
A A 3 实验3 X x
B B 1 实验1 X X
B B 2 实验2 X x
B B 3 实验3 X x
现在要查表,结果view要将同一个学生的所有实验的实验签到打分和实验成绩显示在一个记录中 如下:

序号 学号 姓名 实验1成绩 实验1签到打分 实验2成绩 实验2签到打分 实验3成绩 实验3签到打分
1 A A X X X X x X
2 B B X X X X X X




------解决方案--------------------
SELECT 学号字段, GROUP_CONCAT( CONCAT(成绩字段, ' ', 打分字段) ) FROM table WHERE 1 GROUP BY 学号字段
------解决方案--------------------
SQL code
select 学号,姓名,
    max(if(实验代号=1,实验成绩,null)) as 实验1成绩,
    max(if(实验代号=1,实验签到打分,null)) as 实验1签到打分,
    max(if(实验代号=2,实验成绩,null)) as 实验2成绩,
    max(if(实验代号=2,实验签到打分,null)) as 实验2签到打分,
    max(if(实验代号=3,实验成绩,null)) as 实验3成绩,
    max(if(实验代号=4,实验签到打分,null)) as 实验3签到打分
from MYSQL数据表格式如下
group by 学号,姓名

------解决方案--------------------
SQL code
select 学号,姓名,case when 实验代号=1 then  实验成绩 end as 实验1成绩
,case when 实验代号=1 then  实验签到打分 end as 实验1签到打分
,case when 实验代号=2 then  实验成绩 end as 实验1成绩
,case when 实验代号=2 then  实验签到打分 end as 实验1签到打分
,case when 实验代号=3 then  实验成绩 end as 实验1成绩
,case when 实验代号=3 then  实验签到打分 end as 实验1签到打分

from tb
group by 学号,姓名

------解决方案--------------------
select 学号,姓名,
sum(if(实验代号=1,实验成绩,0)) as 实验1成绩,
sum(if(实验代号=1,实验签到打分,0)) as 实验1签到打分,
sum(if(实验代号=2,实验成绩,0)) as 实验2成绩,
sum(if(实验代号=2,实验签到打分,0)) as 实验2签到打分,
sum(if(实验代号=3,实验成绩,0)) as 实验3成绩,
sum(if(实验代号=4,实验签到打分,0)) as 实验3签到打分
from tt group by 学号,姓名

动态的参考
http://topic.csdn.net/u/20090530/23/0b782674-4b0b-4cf5-bc1a-e8914aaee5ab.html?99355
我的回答