繁体   English   中英

将单行转换为多列 Vertica

[英]Convert single row to multiple columns Vertica

SELECT ID,NAME,VALUE1,VALUE2 FROM my_table where ID=1 ;

查询会给我这样的输出

ID|NAME|VALUE1|VALUE2
1|XYZ|123|325

但我想要以下格式的输出

ID    |1
NAME  |XYZ
VALUE1|123
VALUE2|325

我的列将是固定的,每次结果都是单行时,如何修改查询以获得以下结果?

检查这个例子,它完全符合你的需要。

评论更新:

但是如果我有多个列和行怎么办?

我的 UDF 将对每一行进行转置/反旋转,例如:

daniel=> select * from test limit 4;
 user_id | day_of_week | to_sample
---------+-------------+-----------
       1 |           1 |         1
       1 |           2 |         2
       2 |           1 |         1
       2 |           2 |         2
(4 rows)

daniel=> select unpivot(*) over () from test limit 8;
     KEY     | VALUE
-------------+-------
 user_id     | 1
 day_of_week | 1
 to_sample   | 1
 user_id     | 1
 day_of_week | 2
 to_sample   | 2
 user_id     | 2
 day_of_week | 1
(8 rows)

一种应该符合 ANSI 的方法是只使用一系列联合:

SELECT 'ID' AS key, ID AS value FROM my_table WHERE ID=1
UNION ALL
SELECT 'NAME', NAME FROM my_table WHERE ID=1
UNION ALL
SELECT 'VALUE1', VALUE1 FROM my_table WHERE ID=1
UNION ALL
SELECT 'VALUE2', VALUE2 FROM my_table WHERE ID=1;

如果您还需要预期输出中的确切排序,那么我们可以将计算排序列添加到联合查询,然后子查询和排序。

这也应该有效

SELECT StringTokenizerDelim((ID || ',' || NAME || ',' || VALUE1 || ',' || VALUE2), ',') over (partition by null) FROM my_table where ID = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM