2011-10-23 96 views
1

下面是表的說明,我使用:MySQL查詢援助

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列是唯一的。
  • 凡測驗列取決於有多少測驗是 原始表繼續。並且測驗欄包含各自的學生的每個 的等級。
+1

僅供參考 - 爲你正在嘗試做的技術術語叫做 「數據透視表」 – NotMe

+0

@ChrisLively:哇,謝謝!找到一些很好的例子。我不知道正確的術語。我正在嘗試的方式是關閉... =( – prolink007

+0

您繼續添加的文本對您的問題沒有任何價值。有趣的是,您不斷重新添加它,而不是展示您實際上已經試圖自己弄清楚這一點...... –

回答

3

試試這個:

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