ベストアンサー1
crosstab()
から使用テーブル関数モジュール。
SELECT * FROM crosstab(
$$SELECT user_id, user_name, rn, email_address
FROM (
SELECT u.user_id, u.user_name, e.email_address
, row_number() OVER (PARTITION BY u.user_id
ORDER BY e.creation_date DESC NULLS LAST) AS rn
FROM usr u
LEFT JOIN email_tbl e USING (user_id)
) sub
WHERE rn < 4
ORDER BY user_id
$$
, 'VALUES (1),(2),(3)'
) AS t (user_id int, user_name text, email1 text, email2 text, email3 text);
最初のパラメータにはドル引用符を使用しましたが、特別な意味はありません。これは、クエリ文字列内の単一引用符をエスケープするのに便利なだけであり、よくあるケースです。
詳細な説明と手順:
特に、「追加の列」の場合:
の特別な困難ここにあります:
キー値が不足しています。
→ 次のように置き換えますrow_number()
サブクエリ内。電子メールの数は異なります。
→ 外側では最大 3 つに制限しSELECT
、2 つのパラメータを使用してcrosstab()
、可能なキーのリストを提供します。
注意を払うNULLS LAST
の中にORDER BY
。