我想知道有什么方法可以在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摆弄 数据尝试一下):
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,我知道至少有两种方法可以执行此操作- 动态SQL或将数据转换为xml并解析xml- SQLServer:从列到行。PostgreSQL中也可能有一些XML技巧吗?
带有hstore扩展名:
hstore
SELECT id, skeys(hstore(users)) AS column, svals(hstore(users)) AS value FROM users;