Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql:将列拆分为行_Sql_Postgresql - Fatal编程技术网

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
,我更改了它