求一条比较复杂的sql语句

oFengKun 2017-08-04 11:07:33
简化后有这样一张表(人员成绩表 )
表结构如下: id unitId subjectId score
1 a 1001 80
2 b 1002 90
3 b 1001 90
4 c 1003 70
.........

想查询后得出这样的记录
subjectId a b c d e .....
1001 sum(score) sum(score) sum(score) sum(score) sum(score)
1002 sum(score) sum(score) sum(score) sum(score) sum(score)
1003 sum(score) sum(score) sum(score) sum(score) sum(score)
1004 sum(score) sum(score) sum(score) sum(score) sum(score)
...全文
212 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2017-08-04
  • 打赏
  • 举报
回复
try
select group_concat('sum(if(unitId=''',unitId,''',score,0)) as "',unitId,'"') into  @sql FROM (SELECT DISTINCT unitId 人员成绩表) AS t;
set @sql=concat('select subjectId,',@sql,' from 人员成绩表 group by subjectId ');
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
中国风 2017-08-04
  • 打赏
  • 举报
回复
这是动态写法 你的unitId为动态,不是固定值 固定值可以这样
select subjectId
,SUM(IF(unitId='a',score,0)) AS a 
,SUM(IF(unitId='b',score,0)) AS b
#,--其它同上
FROM  人员成绩表 
group by subjectId
oFengKun 2017-08-04
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
try
select group_concat('sum(if(unitId=''',unitId,''',score,0)) as "',unitId,'"') into  @sql FROM (SELECT DISTINCT unitId 人员成绩表) AS t;
set @sql=concat('select subjectId,',@sql,' from 人员成绩表 group by subjectId ');
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
如果不用存储过程,能写出来吗

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧