如何在MySQL表中转动某些值并单独显示

时间:2016-02-12 08:39:52

标签: mysql sql

我有以下表结构

+---------+----------+-------+------------+------------+
| Student | Subject  | Grade |   Marks    | YearID     |
+---------+----------+-------+------------+------------+
| John    | English  | A     |         80 |         15 |
| John    | French   | C     |         94 |         15 |
| Mike    | English  | A     |         31 |         15 |
| Mike    | French   | C     |         73 |         15 |
+---------+----------+------+------------+------------+

我的问题是我在MySQL中需要这样的东西

 +---------+----------+------+----------+
 | Student | English  |French | YearID  |
 | John    | 80       | 94    | 15      |
 +---------+----------+------+----------+

MySQL脚本中的这个怎么做

1 个答案:

答案 0 :(得分:1)

表格中每个Student + Subject + YearID有行,但您只需要每Student + YearID个结果行。这意味着您希望按Student + YearID汇总数据和分组。然后使用CASE WHEN访问正确的主题:

select 
  student, 
  case when subject = 'English' then marks end as english, 
  case when subject = 'French' then marks end as french, 
  yearid
from mytable
group by student, yearid;

这会为每个Student + YearID提供一行,并选择英文列的英文记录和法文列的法文记录。由于表格中每Student + YearID只能有一个英语和一个法语记录,我们甚至不需要汇总功能(例如SUMMAX )这里。