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

Menghasilkan kolom secara dinamis di PostgreSQL

Kueri tab silang dasar untuk contoh Anda sederhana:

SELECT * FROM crosstab(
       'SELECT zoom, day, point
        FROM   province
        ORDER  BY 1, 2'

     , $$VALUES ('2015-10-01'::date), ('2015-10-02')$$)
AS ct (zoom text, day1 int, day2 int);

Tapi tidak dengan nama kolom dinamis atau jumlah kolom dinamis. Sebagai kompromi, Anda dapat memiliki jumlah kolom yang tetap dan hanya mengisi kolom yang terkemuka. Dasar-dasar:

  • Kueri Tab Silang PostgreSQL

Dinamis?

crosstab_hash tidak akan membantu Anda dengan nama kolom dinamis. Ini untuk penggunaan berulang tanpa mengetikkan daftar definisi kolom, tetapi tidak untuk dinamis nama kolom. Contoh:

  • Menghasilkan kolom secara dinamis untuk tab silang di PostgreSQL
  • Sql:Mengubah baris menjadi kolom

Untuk nama kolom yang benar-benar dinamis, Anda memerlukan dua perjalanan pulang pergi ke server. Apakah Anda mengambil nama kolom dengan kueri pertama untuk membuat kueri kedua, atau Anda membuat kursor atau tabel sementara atau pernyataan yang disiapkan. Apa pun yang Anda coba, Anda memerlukan dua perjalanan pulang pergi. SQL ingin mengetahui tipe pengembalian pada waktu panggilan.

Yang paling dekat dengan panggilan "dinamis" adalah dengan crosstab_n() khusus saya fungsi yang didefinisikan dalam jawaban terkait ini:

  • Alternatif dinamis untuk pivot dengan CASE dan GROUP BY

Atau Anda melepaskan ide kueri tab silang yang sepenuhnya dinamis (karena, Anda tahu, itu tidak mungkin) dan menggunakan alur kerja dua langkah, seperti yang disebutkan di atas.

  1. Biarkan fungsi menghasilkan teks kueri tab silang. Anda dapat menggunakan fungsi yang disediakan di sini (dan menyesuaikannya dengan kebutuhan Anda!):

    • Jalankan kueri tab silang dinamis

    Khususnya, hapus GROUP BY 1, 2 , karena Anda tidak menggabungkan baris sebelum tabulasi silang.

  2. Jalankan fungsi yang dihasilkan.

Untuk kelengkapannya juga ada \crosstabview baru metacommand di psql di Postgres 9.6 (baru saja dirilis) - dengan fungsi serupa, dan dapat menampilkan nama kolom dinamis (melampirkan nama dinamis terjadi di klien psql, bukan di server Postgres).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat daftar indeks yang dibuat untuk tabel di postgres

  2. Simpan hasil kueri dalam variabel menggunakan di PL/pgSQL

  3. Menyortir pohon dengan jalur terwujud?

  4. org.hibernate.internal.util.config.ConfigurationException:Tidak dapat menemukan sumber daya cfg.xml [/HibernateTest/src/hibernate.cfg.xml]

  5. Penyeimbangan Beban PostgreSQL Menggunakan HAProxy &Keepalive