[英]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.