MySQL查询协助

标签 mysql sql pivot

这是我正在使用的表的描述:

describe mjla_db.StudentRecordTable2;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| classId   | varchar(20) | NO   | MUL | NULL    |       |
| studentId | varchar(20) | NO   | MUL | NULL    |       |
| quizGrade | tinyint(4)  | YES  |     | NULL    |       |
| quizId    | int(11)     | NO   | MUL | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

这是数据库中的示例数据:

+------------+-----------+------------+---------+------------+
| Student ID | Last Name | First Name | Quiz ID | Quiz Grade |
+------------+-----------+------------+---------+------------+
| A1         | Cat       | Tom        |      19 |       75   |
| A2         | pancake   | Harry      |      19 |       65   |
| A5         | Worthy    | Dick       |      19 |       NULL |
| A1         | Cat       | Tom        |      20 |       55   |
| A2         | pancake   | Harry      |      21 |       NULL |
| A2         | pancake   | Harry      |      20 |       47   |
| A5         | Worthy    | Dick       |      20 |       95   |
| A1         | Cat       | Tom        |      21 |       55   |
| A5         | Worthy    | Dick       |      21 |       95   |
+------------+-----------+------------+---------+------------+
3 rows in set (0.00 sec)

我试图获得的结果类似于以下内容:

+------------+-----------+------------+---------+------------+------------+
| Student ID | Last Name | First Name | Quiz 19 | Quiz 20    | Quiz 21    |
+------------+-----------+------------+---------+------------+------------+
| A1         | Cat       | Tom        |      75 |       55   |       55   |
| A2         | pancake   | Harry      |      65 |       47   |       NULL |
| A5         | Worthy    | Dick       |     NULL|       95   |       95   |
+------------+-----------+------------+---------+------------+------------+
  • 学生 ID 列是唯一的。
  • 测验列的继续位置取决于测验的数量 原来的表。测验列包含每个人的成绩 各自的学生。

最佳答案

试试这个:

 select s.StudentId, s.FirstName, s.LastName, 
 Case when s.QuizId = 19 then quizGrade end as 'Quiz 19',
 Case when s.QuizId = 20 then quizGrade end as 'Quiz 20',
 Case when s.QuizId = 21 then quizGrade end as 'Quiz 21'
 from StudentRecordTable2 sr 
 inner join Students s on sr.StudentId = s.StudentId

参见 this

关于MySQL查询协助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7863791/

相关文章:

MySQL:多主键和自增

php - 拍卖出价 - SELECT LOCK IN SHARE MODE 是否会保留最新信息?

java - 你如何解析一个困难的 .txt 文件?

c# - 关于SQL注入(inject)和参数化查询的问题

.net - Linq to SQL中是否提供Unpivot(非枢轴)功能?如何?

php - 数据库中历史表的总和,以显示用户的总信用(声誉)

mysql - 使用顺序/范围概念分组

SQL Pivot函数获取top notes字段

c# - 枢轴选择更改时如何在枢轴项目中加载图像后如何加载音频文件

php - 更新和删除 CakePHP 中的唯一连接关系