我如何转置表的行以及mysql中的列名?

g2ieeal7  于 2023-04-04  发布在  Mysql
关注(0)|答案(2)|浏览(114)

我有一个只有一行的表,如下所示,x1c 0d1x
在这里,我想将列名转换为一列,将行转换为另一列,列名转换为一些预定义的数字,如下所示(A-〉1 E9,B-〉1 E8,... E-〉1 E5),

我不能使用透视命令或其他。有没有什么好的方法来做这个转换?谢谢!!

nkoocmlb

nkoocmlb1#

使用UNION

SELECT 1e9 AS divisor, A AS value
FROM yourTable
UNION
SELECT 1e8, B
FROM yourTable
UNION
SELECT 1e7, C
FROM yourTable
...
ca1c2owp

ca1c2owp2#

以下是使用横向连接取消透视数据的一种方法:

select x.*
from mytable t 
cross join lateral (
    select t.a, 1e9
    union all t.b, 1e8
    union all t.c, 1e7,
    union all t.d, 1e6
    union all t.e, 1e75
) x(divisor, val)

横向连接比union更有效地解决了这个问题,因为它只扫描一次表-尽管如果表只有一行,那么显然它不会产生明显的差异。
该功能在MySQL 8.0.14版开始提供。

相关问题