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;