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
我的列将被修复,每次结果都是一行时,如何修改查询以获得以下结果?
答案 0 :(得分:1)
应该符合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;
如果您还需要预期输出中的确切排序,那么我们可以将一个计算的排序列添加到联合查询,然后是子查询并按顺序排序。
答案 1 :(得分:1)
检查this示例,它完全符合您的需要。
评论更新:
但如果我有多个列和行怎么能转置
我的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)
答案 2 :(得分:0)
这也应该有效
SELECT StringTokenizerDelim((ID || ',' || NAME || ',' || VALUE1 || ',' || VALUE2), ',') over (partition by null) FROM my_table where ID = 1