MySQL 一行转一列实现方法

1. 流程图

首先,我们来看一下整个实现过程的流程图。

gantt
    dateFormat YYYY-MM-DD
    title MySQL 一行转一列实现流程

    section 数据准备
    准备数据           :done, 2021-10-01, 2021-10-02

    section SQL 实现
    创建表格           :done, 2021-10-03, 2021-10-04
    插入数据           :done, 2021-10-04, 2021-10-05
    查询并转换数据     :done, 2021-10-05, 2021-10-06

    section 结果展示
    展示转换后的数据   :done, 2021-10-06, 2021-10-07

2. 数据准备

在开始之前,我们首先需要准备一些数据用于演示。我们可以创建一个名为 students 的表格,并向其中插入一些数据。

CREATE TABLE students (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  subject VARCHAR(50),
  score INT
);

INSERT INTO students (id, name, subject, score)
VALUES (1, 'Alice', 'Math', 95),
       (2, 'Bob', 'Math', 85),
       (3, 'Alice', 'Science', 90),
       (4, 'Bob', 'Science', 80),
       (5, 'Alice', 'English', 92),
       (6, 'Bob', 'English', 88);

3. SQL 实现

3.1 创建表格

在开始转换之前,我们首先需要创建一个新的表格用于存储转换后的数据。我们可以命名为 student_scores

CREATE TABLE student_scores (
  name VARCHAR(50),
  math INT,
  science INT,
  english INT
);

3.2 插入数据

接下来,我们需要编写一段 SQL 代码来将原始数据转换并插入到新的表格中。我们可以使用 MySQL 中的 CASE 表达式来实现这一转换过程。

INSERT INTO student_scores (name, math, science, english)
SELECT name,
       MAX(CASE WHEN subject = 'Math' THEN score END) AS math,
       MAX(CASE WHEN subject = 'Science' THEN score END) AS science,
       MAX(CASE WHEN subject = 'English' THEN score END) AS english
FROM students
GROUP BY name;

3.3 查询并转换数据

现在,我们已经将数据插入到了新的表格中,下一步是查询并验证转换后的数据。

SELECT * FROM student_scores;

运行以上查询语句,你将会看到如下结果:

name math science english
Alice 95 90 92
Bob 85 80 88

4. 结果展示

最后,我们已经成功将原始数据进行了一行转一列的转换,并将结果插入到了新的表格中。可以通过查询新的表格来展示转换后的数据。

以上就是实现 "MySQL 一行转一列" 的完整流程。如果你按照以上步骤操作,也可以实现相同的效果。

希望这篇文章对你有所帮助!如果有任何问题,欢迎随时提问。