PostgreSQL列到行而不显式指定列名/列

时间:2013-08-05 06:17:53

标签: sql postgresql data-processing

我想知道有没有办法在PostgreSQL中进行unpivot(将列转换为行)数据。

例如,如果我有一个像这样的表:

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,我至少知道两种方法 - 动态SQL或将数据转换为xml并解析xml - SQL Server : Columns to Rows。可能在PostgreSQL中也有一些xml技巧吗?

1 个答案:

答案 0 :(得分:1)

hstore分机:

SELECT id, skeys(hstore(users)) AS column, svals(hstore(users)) AS value FROM users;