2016-07-22 12 views
0

同じIDを持つ複数の行を1つに結合しようとしています。Postgresqlを使用して複数の行を1つにマージする

私の生のテーブルには、次のようになります。

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

私の最初の質問は、なぜこれをやりたいのでしょうか?しかし、私は逃げるだろう... person_idはすでに事前に知られている(IEのクエリはpersonID 2と3を探しているに過ぎない)、列の上限は2人か、それ以上あるだろうか?これは、あなたがSQLの代わりに、GUIが報告しなければならない何かをやろうとしているようです。また、person_1とperson_2のどちらに値が入るのかを尋ねる必要があります。それは行の順序だけですか? – Twelfth

+0

'idによってmy_raw_rableグループからのperdataとして、select id、array_agg(行(person_id、eur_amount)order by person_id desc) – Abelisto

答えて

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; 
関連する問題