PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgres - Transpose Baris ke Kolom

Gunakan crosstab() dari modul tablefunc.

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);

Saya menggunakan kutipan dolar untuk parameter pertama, yang tidak memiliki arti khusus. Lebih mudah untuk menghindari tanda kutip tunggal dalam string kueri, yang merupakan kasus umum:

  • Menyisipkan teks dengan tanda kutip tunggal di PostgreSQL

Penjelasan dan instruksi terperinci:

  • Kueri Tab Silang PostgreSQL

Dan khususnya, untuk "kolom tambahan":

  • Pivot pada Beberapa Kolom menggunakan Tablefunc

Kesulitan khusus ini dia:

  • Kurangnya nama kunci.
    --> Kita ganti dengan row_number() dalam subkueri.

  • Jumlah email yang bervariasi.
    --> Kami membatasi maksimal. dari tiga di bagian luar SELECT
    dan gunakan crosstab() dengan dua parameter, memberikan daftar kemungkinan kunci.

Perhatikan NULLS LAST di ORDER BY .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Temukan perbedaan antara stempel waktu dalam hitungan detik di PostgreSQL

  2. Mendaftar dan Mengganti Basis Data di PostgreSQL

  3. Bagaimana cara mendapatkan catatan Pertama dan Terakhir dari kueri sql?

  4. Bagaimana cara memilih lebih dari 1 catatan per hari?

  5. Cara Membatasi Akses ke Database di PostgreSQL