
Tukar data baris ke dalam lajur: paparkan alamat e-mel terkini pengguna
Soalan:
Anda mempunyai berbilang alamat e-mel bagi setiap pengguna dalam jadual anda dan anda mahu meratakannya ke dalam lajur supaya ia memaparkan tiga alamat e-mel terbaharu untuk setiap pengguna berdasarkan tarikh penciptaan.
Keluaran yang dijangkakan:
| user_name | user_id | email1 | email2 | email3 |
|---|---|---|---|---|
| Mary | 123 | [email protected] | [email protected] | [email protected] |
| Joe | 345 | [email protected] | NULL | NULL |
Penyelesaian:
Untuk melakukan ini, anda boleh memanfaatkan fungsi tab silang() modul tablefunc dalam PostgreSQL:
<code class="language-sql">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 <= 3
ORDER BY user_id, rn
$$,
'VALUES (1),(2),(3)'
) AS ct (user_id integer, user_name text, email1 text, email2 text, email3 text);</code>Penjelasan:
Nota:
Atas ialah kandungan terperinci Bagaimana untuk Memindahkan Data Baris E-mel Pengguna ke Lajur dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!