2015-08-29 42 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