1

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 を解析する - SQL Server : Columns to Rowsの少なくとも 2 つの方法を知っています。PostgreSQLにもいくつかのxmlトリックがあるのでしょうか?

4

1 に答える 1

1

延長hstoreあり:

SELECT id, skeys(hstore(users)) AS column, svals(hstore(users)) AS value FROM users;
于 2013-08-05T08:49:39.300 に答える