在 Postgresql 中逆透视
Unpivot in Potgresql
如何在不使用 UNION 的情况下在 Postgresql 中取消透视?我有 100 多列,我正在寻找一种简洁的方法。
给定 table:
id c1 c2 c3
1 X Y Z
2 A B C
3 Y C Z
想要table:
id col
1 X
1 Y
1 Z
2 A
2 B
2 C
3 Y
3 C
3 Z
select id, value as col
from my_table
cross join jsonb_each_text(to_jsonb(my_table))
where key <> 'id';
id | value
----+-------
1 | X
1 | Y
1 | Z
2 | A
2 | B
2 | C
3 | Y
3 | C
3 | Z
(9 rows)
在 Postgres 9.3 或 9.4 中使用 to_json()
和 json_each_text()
。
在版本 9.1 或 9.2 中安装 hstore:
create extension if not exists hstore;
select id, value as col
from my_table
cross join each(hstore(my_table))
where key <> 'id';
如何在不使用 UNION 的情况下在 Postgresql 中取消透视?我有 100 多列,我正在寻找一种简洁的方法。
给定 table:
id c1 c2 c3
1 X Y Z
2 A B C
3 Y C Z
想要table:
id col
1 X
1 Y
1 Z
2 A
2 B
2 C
3 Y
3 C
3 Z
select id, value as col
from my_table
cross join jsonb_each_text(to_jsonb(my_table))
where key <> 'id';
id | value
----+-------
1 | X
1 | Y
1 | Z
2 | A
2 | B
2 | C
3 | Y
3 | C
3 | Z
(9 rows)
在 Postgres 9.3 或 9.4 中使用 to_json()
和 json_each_text()
。
在版本 9.1 或 9.2 中安装 hstore:
create extension if not exists hstore;
select id, value as col
from my_table
cross join each(hstore(my_table))
where key <> 'id';