行转列

准备表:

CREATE TABLE student(
  id int PRIMARY KEY AUTO_INCREMENT,
  name varchar(20),
  course varchar(20),
  score float);

INSERT INTO student(name, course, score) VALUES ('张三','数学',34),
                    ('张三','语文',58),
                    ('张三','英语',58),
                    ('李四','数学',45),
                    ('李四','语文',87),
                    ('李四','英语',45),
                    ('王五','数学',76),
                    ('王五','语文',34),
                    ('王五','英语',89);
View Code
mysql> select * from student;
+----+--------+--------+-------+
| id | name   | course | score |
+----+--------+--------+-------+
|  1 | 张三   | 数学   |    34 |
|  2 | 张三   | 语文   |    58 |
|  3 | 张三   | 英语   |    58 |
|  4 | 李四   | 数学   |    45 |
|  5 | 李四   | 语文   |    87 |
|  6 | 李四   | 英语   |    45 |
|  7 | 王五   | 数学   |    76 |
|  8 | 王五   | 语文   |    34 |
|  9 | 王五   | 英语   |    89 |
+----+--------+--------+-------+

列转行之后:

SELECT name,
       max(CASE WHEN course = "语文" THEN score ELSE 0 END) 语文,
       max(CASE WHEN course = "数学" THEN score ELSE 0 END) 数学,
       max(CASE WHEN course = "英语" THEN score ELSE 0 END) 英语
FROM student1
GROUP BY name;
+--------+--------+--------+--------+
| name   | 数学   | 语文   | 英语   |
+--------+--------+--------+--------+
| 张三   |     34 |     58 |     58 |
| 李四   |     45 |     87 |     45 |
| 王五   |     76 |     34 |     89 |
+--------+--------+--------+--------+

列转行

如何将原始横表转成竖表?(宽表)

由于数据量较大,一般存储为横表(一笔合同多行),需要将横表转换为竖表(一笔合同一行)

 

posted @ 2019-12-12 18:02  aggressive2019  阅读(136)  评论(0编辑  收藏  举报