admin

PostgreSQL列到没有明确指定列名/列的行

sql

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


阅读 170

收藏
2021-07-01

共1个答案

admin

带有hstore扩展名:

SELECT id, skeys(hstore(users)) AS column, svals(hstore(users)) AS value FROM users;
2021-07-01