Postgresql:将列拆分为行
我有一张这样的桌子:Postgresql:将列拆分为行,sql,postgresql,Sql,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 ----------
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中可能吗?使用
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
这是一份推荐信。非常感谢!但是,对于第一行,我得到的
列“gid”不存在。有什么想法吗?您的表格中有列gid
?您是否将表名从t
更改为实际的表名?是的,是的-我实际上根据我的示例构建了表。如果我在第一行中从t添加,它可以工作,但我在第3Oh行中得到联合类型字符变化和整数无法匹配
,则转换应为cat2
,我更改了它