2015-08-29 3 views
2

У меня есть таблица вроде этого:PostGreSQL: Сплит столбцы в строки

gid | cat1 | cat2 | some_value 
------------------------------- 
1 | A | 100 | I 
2 | B | 200 | II 
3 | C | 300 | III 
4 | D | 400 | IV 

Я хотел бы преобразовать эту таблицу в нечто подобное, то есть преобразовать значение столбца в значение строки:

gid | category | value | some_value 
----------------------------------- 
1 | cat1 | A |  I 
1 | cat2 | 100 |  I 
2 | cat1 | B |  II 
2 | cat2 | 200 |  II 
... | ... | ... |  ... 

Возможно ли это в Postgresql?

ответ

2

Использование Union:

Select gid, 'cat1' as category, cat1 as value, some_value from t 
union all 
Select gid, 'cat2' as category, cast(cat2 as varchar(100)) as value, some_value from t 
order by gid 

вот fiddle для него.

+0

спасибо! Тем не менее, я получаю «столбец» gid «не существует» для первой строки. Есть идеи? – n1000

+0

У вас есть столбец 'gid' в вашем столе? вы изменили имя таблицы с 't' на ваше фактическое имя таблицы? –

+0

Да и да - я фактически построил таблицу из своего примера. Если я добавлю 'from t' в первую строку, это сработает, но я получаю, что символ' UNION типа меняется и целое не может быть сопоставлен' в строке 3 – n1000

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