使用Postgresql将多行合并为一行

时间:2016-07-22 15:00:50

标签: sql postgresql

我正在尝试将具有相同ID的多行合并为一个。

我的原始表格如下:

ID | person_id | eur_amount
1        3           200
1        2           100
2        3           80
2        2           100

输出应如下所示:

ID | person_1 | eur_amount_1 | person_2 | eur_amount_2 |
1        3           200           2           100
2        3            80           2           100

最多人数相同。我已经尝试用多个JOIN语句和这里提到的交叉表()函数来解决它PostgreSQL Crosstab Query

但我无法找到解决方案 - 是否有人知道获得所需输出的好方法?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以使用交叉表或条件聚合来执行此操作。但是您需要使用row_number()来标识行。例如:

select id,
       max(case when seqnum = 1 then person_id end) as person_id_1,
       max(case when seqnum = 1 then eur_amount end) as eur_amount_1,
       max(case when seqnum = 2 then person_id end) as person_id_2,
       max(case when seqnum = 2 then eur_amount end) as eur_amount_2
from (select t.*,
             row_number() over (partition by id order by id) as seqnum
      from t
     ) t
group by id;