mysql 行转列和列转行实例详解

网络编程 2025-03-13 07:33www.168986.cn编程入门

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, -- 数学成绩

上一篇:JS获得选取checkbox整行数据的方法 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by