MYSQL将一行数据的多列值放到另一列的多个行中

在MySQL中,如果你想要将一行数据的多列值放到另一列的多个行中,你可以使用一个辅助表(例如,使用nums表)来生成序列,然后与你的原始表进行联接。

比如下面一行一行数据,包含col1~col5总共5列,现在需要将这5类转换到一列中。

转换前的数据:

转换后的结果:

 

以下是一个示例:

首先,创建一个辅助的序列表:

CREATE TABLE nums (num INT);

INSERT INTO nums (num)
VALUES (1),(2),(3),(4),(5);

说明:根据需要转换的列数决定序列(比如需要转换5列,这里就插入5条数据)

然后,假设你有一个原始表original_table,它有多个列需要转换到多行:

CREATE TABLE original_table (
col1 VARCHAR(255),
col2 VARCHAR(255),
col3 VARCHAR(255),
col4 VARCHAR(255),
col5 VARCHAR(255)
);

INSERT INTO original_table (col1, col2, col3, col4, col5)
VALUES ('A', 'B', 'C', 'D', 'E');

 

现在,你可以使用下面的查询来将这些列值转换到多行:

SELECT
num,
CASE
WHEN num = 1 THEN  col1
WHEN num = 2 THEN  col2
WHEN num = 3 THEN  col3
WHEN num = 4 THEN  col4
WHEN num = 5 THEN  col5
END new_col
FROM
( SELECT 1 id, col1, col2, col3, col4, col5 FROM original_table ) T
INNER JOIN
( SELECT 1 id, num FROM nums ) T2 ON T.id = T2.id ;

 

这将输出如下结果:

请注意,这个例子中nums表只有5个数字,但在实际情况中,你可能需要更多的数字来匹配你要展开的列数。根据你的需求,你可能需要创建一个更大的序列表,或者使用其他方法来生成序列。

 

posted @ 2024-11-13 09:41  业余砖家  阅读(40)  评论(0编辑  收藏  举报