mysql查询 行转列
时间: 2023-11-30 15:42:42 浏览: 47
SQL行转列显示
以下是MySQL查询行转列的方法:
假设有如下表结构:
```
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`subject` varchar(50) DEFAULT NULL,
`score` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;```
表中有如下数据:
```
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('张三', '语文', 80);
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('张三', '数学', 90);
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('张三', '英语', 70);
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('李四', '语文', 85);
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('李四', '数学', 95);
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('李四', '英语', 75);
```
现在需要将每个人的成绩转换为一行,列名为科目,行名为姓名,可以使用如下SQL语句:
```
SELECT
name,
MAX(CASE WHEN subject = '语文' THEN score ELSE NULL END) AS '语文',
MAX(CASE WHEN subject = '数学' THEN score ELSE NULL END) AS '数学',
MAX(CASE WHEN subject = '英语' THEN score ELSE NULL END) AS '英语'
FROM
test
GROUP BY
name;
```
执行以上SQL语句后,将得到如下结果:
```
+------+----+----+----+
| name | 语文 | 数学 | 英语 |
+------+----+----+----+
| 张三 | 80 | 90 | 70 |
| 李四 | 85 | 95 | 75 |
+------+----+----+----+
```
阅读全文