MySql 查询将包含定界符的列转换为行

标签 mysql sql

基本上我需要编写一个查询来选择下表

UID | Col A | Col B
123   x;y;z    v;b

转换为以下要求格式。

123 , Col A, X
123 , Col A, y
123 , Col A, z
123 , Col B, v
123 , Col B, b

非常感谢任何建议。

最佳答案

这很痛苦,但这里有一个方法:

select uid, 'Col A' as col,
       substring_index(substring_index(colA, ';', n.n), ';', -1) as val,
from t cross join
     (select 1 as n union all select 2 union all select 3
     ) n
     on (length(replace(colA, ';', '; ')) - length(colA)) <= n.n + 1
union all
select uid, 'Col B' as col,
       substring_index(substring_index(colB, ';', n.n), ';', -1) as val,
from t cross join
     (select 1 as n union all select 2 union all select 3
     ) n
     on (length(replace(colB, ';', '; ')) - length(colB)) <= n.n + 1;

关于MySql 查询将包含定界符的列转换为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35339716/

相关文章:

mysql - 在给定条件下连接 2 列

MySQL AND & OR 运算符

sql - 在 SQL 中,如何获取表中列值最低的所有行?

php - 连接两个表以显示数据

mysql - 仅当记录不存在时才插入查询

php - 在 HTML 中使用 PHP 显示 MYSQL 信息

mysql - 是否可以在 mysql 中使用 "Index"作为列名

mysql - 查询 Node 超时(mysql2)

MySQL : collect the sum of the associated values

SQL Server : merge subqueries without duplicate