MySQL中,如何把一条记录的不同列的数据,转换为行显示?比如成绩表,有id,sno,course,score,4列,分别为主键,学生编号,课程和分数。课程列里面对应有语文,数学和英语。这样表里现在是3条数据,对应的sno是同一个。我想转变为,一行数据,即把语文,数学和英语作为列名,然后对应的分数成为列的值。然后如果说,反过来的话,怎么办?即已知后面的,想转换为前面的方式?
时间: 2024-03-10 12:49:59 浏览: 73
把一条记录的不同列的数据,转换为行显示,可以使用MySQL中的PIVOT和UNPIVOT操作。这里提供一种基于UNION ALL的方法来实现。
把成绩表转换为行显示的SQL语句如下:
```
SELECT sno,
MAX(CASE WHEN course = '语文' THEN score ELSE NULL END) AS '语文',
MAX(CASE WHEN course = '数学' THEN score ELSE NULL END) AS '数学',
MAX(CASE WHEN course = '英语' THEN score ELSE NULL END) AS '英语'
FROM score
GROUP BY sno;
```
这里使用了MAX函数来将每个分数转换为对应的列值。如果某个学生没有某门课程的分数,则对应的列值为NULL。
如果已经有了行显示的数据,想要转换为列显示的数据,可以使用UNION ALL操作,如下所示:
```
SELECT sno, '语文' AS course, 语文 AS score FROM score_table
UNION ALL
SELECT sno, '数学' AS course, 数学 AS score FROM score_table
UNION ALL
SELECT sno, '英语' AS course, 英语 AS score FROM score_table;
```
这里使用了UNION ALL操作,将不同课程的数据组合在一起,同时使用常量列来表示课程列,这样就可以将行数据转换为列数据。
阅读全文