我想知道有什么方法可以在 PostgreSQL 中对数据进行逆透视(将列转为行)。
例如,如果我有这样一张表:
ID Name Age
1 Alice 16
2 Bob 21
3 Carl 18
我想得到这样的输出
ID Column_Name Column_Value
1 Name Alice
1 Age 16
2 Name Bob
2 Age 21
3 Name Carl
3 Age 18
我知道我可以这样做(sql fiddle 用数据来尝试):
select
U.ID,
unnest(array['Name', 'Age']) as Column_Name,
unnest(array[U.Name, U.Age::text]) as Column_Value
from Users as U
但是有没有什么办法可以在不显式指定列名的情况下对表中的所有列执行此操作? 例如,对于 SQL Server,我知道至少有 2 种方法可以做到这一点 - 动态 SQL 或将数据转换为 xml 并解析 xml - SQL Server : Columns to Rows . PostgreSQL 中可能也有一些 xml 技巧?
最佳答案
使用 hstore
扩展:
SELECT id, skeys(hstore(users)) AS column, svals(hstore(users)) AS value FROM users;
关于sql - 未明确指定列名/列的 PostgreSQL 列到行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18051677/