我有一个只有一行的表,如下所示,x1c 0d1x在这里,我想将列名转换为一列,将行转换为另一列,列名转换为一些预定义的数字,如下所示(A-〉1 E9,B-〉1 E8,... E-〉1 E5),
我不能使用透视命令或其他。有没有什么好的方法来做这个转换?谢谢!!
nkoocmlb1#
使用UNION
UNION
SELECT 1e9 AS divisor, A AS value FROM yourTable UNION SELECT 1e8, B FROM yourTable UNION SELECT 1e7, C FROM yourTable ...
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版开始提供。
union
2条答案
按热度按时间nkoocmlb1#
使用
UNION
ca1c2owp2#
以下是使用横向连接取消透视数据的一种方法:
横向连接比
union
更有效地解决了这个问题,因为它只扫描一次表-尽管如果表只有一行,那么显然它不会产生明显的差异。该功能在MySQL 8.0.14版开始提供。