2013-08-05 4 views
1

Я хотел бы знать, есть ли способ сделать univot (превратить столбцы в строки) данные в PostgreSQL.Столбцы 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. Может быть, есть и xml трюк в PostgreSQL?

+0

см это http://stackoverflow.com/questions/1128737/unpivot-and-postgresql это объяснить, как UNPIVOT с помощью UNION ALL –

+0

Спасибо, но я не хочу явным образом указываю столбцы –

ответ

1

С hstore расширения:

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

спасибо, имейте это в виду –

+0

отлично работает, извините, не успел попробовать –

Смежные вопросы