【问题标题】:PostgreSQL columns to rows with no explicilty specifying column names / columnsPostgreSQL 列到行而不显式指定列名/列
【发布时间】:2013-08-05 06:17:52
【问题描述】:

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

【问题讨论】:

标签: sql postgresql data-processing


【解决方案1】:

带有hstore 扩展名:

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

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2023-02-26
    相关资源
    最近更新 更多