mysql 行转列和列转行实例详解
MySQL行转列与列转行详解
====================
在数据库操作中,我们经常遇到需要将数据行转换为列,或者将列转换为行的需求。这在MySQL数据库中尤为常见。下面,我将详细介绍如何进行行转列和列转行操作,并提供相应的实例。
一、行转列
-
假设我们有一个成绩表TEST_TB_GRADE,包含学生姓名、科目和成绩。我们希望将每个学生的各科目成绩从多行数据转换为一行数据展示。
建表语句:
```sql
CREATE TABLE TEST_TB_GRADE (
ID int(10) NOT NULL AUTO_INCREMENT,
USER_NAME varchar(20) DEFAULT NULL,
COURSE varchar(20) DEFAULT NULL,
SCORE float DEFAULT '0',
PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
```
```sql
insert into TEST_TB_GRADE(USER_NAME, COURSE, SCORE) values
("张三", "数学", 34),
("张三", "语文", 58),
("张三", "英语", 58),
("李四", "数学", 45),
... (其他数据) ...
```
查询语句实现行转列:
```sql
SELECT
user_name,
MAX(CASE WHEN course = '数学' THEN score ELSE 0 END) AS 数学,
MAX(CASE WHEN course = '语文' THEN score ELSE 0 END) AS 语文,
MAX(CASE WHEN course = '英语' THEN score ELSE 0 END) AS 英语
FROM test_tb_grade GROUP BY USER_NAME;
```
二、列转行
-
假设我们有一个经过行转列处理后的表TEST_TB_GRADE2,包含学生姓名和各科目的成绩列。现在希望将学生的成绩从列转换为行展示。
建表语句:
```sql
CREATE TABLE TEST_TB_GRADE2 (
ID int(10) NOT NULL AUTO_INCREMENT,
USER_NAME varchar(20) DEFAULT NULL,
CN_SCORE float DEFAULT NULL, -- 语文成绩
MATH_SCORE float DEFAULT NULL, -- 数学成绩