SQL查询字段作为列

Rub*_*_PH 4 mysql sql select pivot

我真的不知道如何把这个,但请查看下面的详细信息.

学生

|Student_ID|Student_Name|
|1         |Ryan        |
|2         |Camille     |
|3         |George      |
Run Code Online (Sandbox Code Playgroud)

年级

|Student_ID|Subject |Grade
|1         |Math    |5 
|1         |English |3 
|1         |History |1
|2         |Math    |3 
|2         |English |4 
|2         |History |1 
|3         |Math    |5 
|3         |English |1 
|3         |History |2 
Run Code Online (Sandbox Code Playgroud)

有可能得到这个结果吗?

Student_Name|Math|English|History
Ryan        |5   |3      |1
Camille     |3   |4      |1
George      |5   |1      |2
Run Code Online (Sandbox Code Playgroud)

现在我通过首先使用列名称填充未绑定的数据网格,然后是学生姓名,然后添加每个学生姓名的详细信息,从而实现了这一目标.这很耗时,我想更好地优化查询.

提前致谢.

Joh*_*Woo 11

尝试,

SELECT  a.Student_name,
        MAX(CASE WHEN subject = 'MATH' THEN grade ELSE NULL END) MathGrade,
        MAX(CASE WHEN subject = 'ENGLISH' THEN grade ELSE NULL END) EnglishGrade,
        MAX(CASE WHEN subject = 'History' THEN grade ELSE NULL END) HistoryGrade
FROM    Student a
        LEFT JOIN Grade b
            ON a.Student_ID = b.Student_ID
GROUP BY a.Student_name
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示