我正在尝试将具有相同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。
但我无法找到解决方案 - 是否有人知道获得所需输出的好方法?
提前致谢!
答案 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;