sql - 未明确指定列名/列的 PostgreSQL 列到行

标签 sql postgresql data-processing

我想知道有什么方法可以在 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/

相关文章:

sql - 存储总值或在运行时求和的最佳实践

MySQL - 在 Y 最低的地方更新 X

mysql - 如何编写条件 mysql 查询?

ruby-on-rails - Activerecord 将 UUID 读取为整数。我需要实际的 UUID 作为字符串

machine-learning - 在分割训练集和测试数据集之前,机器学习中有多少种预处理技术?

apache-nifi - Apache NiFi : Add column to csv using mapped values

mysql - 连接表以从其他表获取 ID 的名称

postgresql - 连接到 Postgresql 数据库并执行 SQL 命令时调用 Sqlcmd 失败

postgresql - 使用 SQLAlchemy 通过 unix 套接字连接到数据库

Python 多处理循环