MySQL数据透视处理值

MySQL数据透视处理值,mysql,pivot,Mysql,Pivot,我有一张像下面这样的桌子: +------+------+------+-------+ | pkey | name | exam | score | +------+------+------+-------+ | 1 | Bob | Math| 75 | | 2 | Bob | Eng | 77 | | 3 | Bob | Phy | 78 | | 4 | Sue | Math| 80 | | 5 | Sue | En

我有一张像下面这样的桌子:

+------+------+------+-------+
| pkey | name | exam | score |
+------+------+------+-------+
|    1 | Bob  |  Math|    75 |
|    2 | Bob  |  Eng |    77 |
|    3 | Bob  |  Phy |    78 |
|    4 | Sue  |  Math|    80 |
|    5 | Sue  |  Eng |    90 |
|    6 | Sue  |  Phy |    97 |
|    7 | Suzy |  Math|    98 |
|    8 | Suzy |  Eng |    99 |
|    9 | Suzy |  Phy |    99 |
+------+------+------+-------+
我想做一个查询,将其转为:

+------+------+------+-------+
| Name | Math |  Phy |  Eng  | 
+------+------+------+-------+ 
|  Bob | 75   |  78  |    77 |
|  Sue | 80   |  97  |    90 |
|  Suzy| 90   |  99  |    99 |
+------+------+------+-------+
问题是,考试的规则可能有500个不同的值,我不能全部定义它们,因为它们最终可能会改变,开始有600个不同的值

是否可以创建一个查询来读取检查值,并创建一个新列来显示检查值

例如,他们将Hist添加到考试的值中,然后说Suzy得了100分,结果如下:

+------+------+------+-------+-----+
| Name | Math |  Phy |  Eng  | Hist|
+------+------+------+-------+-----+
|  Bob | 75   |  78  |    77 |     |
|  Sue | 80   |  97  |    90 |     |
|  Suzy| 90   |  99  |    99 | 100 |
+------+------+------+-------+-----+

提前感谢

SQL查询必须有一组定义良好的列。您可以使用
prepare
语句和动态SQL来做您想做的事情

另一种方法是创建一个可能值的字符串,例如
Math:75、Phy78、Eng:77
。如果这对您有效:

select name, group_concat(exam, ':', score separator ', ')
from table t
group by name;