【发布时间】:2014-09-04 16:20:22
【问题描述】:
我已经尝试了很多方法在 Postgres 中按列“转置”行,但我仍然做不到。 给定 Postgres 视图中的一组数据,如下所示:
查看1
ID|A_|B_|C_
--+--+--+--
01|25|AA|1C
02|50|BB|1C
02|12|AA|2C
03|27|BB|2C
03|87|AA|3C
我希望能够对此结果进行查询:
ID| A_1| B_1| C_1| A_2| B_2| C_2
--+----+----+----+----+----+----
01| 25 | AA | 1C | __ | __ | __
02| 50 | BB | 1C | 12 | AA | 2C
03| 27 | BB | 2C | 87 | AA | 3C
这甚至可以尝试在 Postgres 中进行吗?我正在尝试做这样的事情
select * from crosstab(
$$select id, a_, b_, c_, rn
from (
select v.id, v.a_, v.b_, v.c_, row_number() over (partition by v.id order by v.id desc nulls last) as rn
from view1 v
) sub
order by id
$$
, 'values (1), (2), (3)'
) as t (id varchar, a_1 bigint, b_1 varchar, c_1 varchar, a_2 varchar, b_2 varchar, c_2 varchar)
【问题讨论】:
-
您能展示一下到目前为止您尝试过的内容吗?
-
这在任何数据库中都是可能的,但如上所述,您需要展示一些工作原理
-
order by v.id在您的窗口子句中没有意义。您如何确定每组相同ID中的“第一”和“第二”值?
标签: sql postgresql stored-procedures pivot crosstab