【发布时间】: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技巧吗?
【问题讨论】:
-
参考这个stackoverflow.com/questions/1128737/unpivot-and-postgresql 这解释了如何使用 UNION ALL 进行反透视
-
谢谢,但我不想明确指定列
标签: sql postgresql data-processing