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

Buat kolom secara dinamis untuk tab silang di PostgreSQL

Anda dapat menggunakan fungsi C yang disediakan crosstab_hash untuk ini.

Manual tidak terlalu jelas dalam hal ini. Disebutkan di akhir bab tentang crosstab() dengan dua parameter:

Anda dapat membuat fungsi yang telah ditentukan sebelumnya untuk menghindari keharusan menulis nama dan jenis kolom hasil di setiap kueri. Lihat contoh di bagian sebelumnya. Fungsi C yang mendasari untuk bentuk crosstab ini diberi nama crosstab_hash .

Untuk contoh Anda:

CREATE OR REPLACE FUNCTION f_cross_test_db(text, text)
  RETURNS TABLE (kernel_id int, key1 int, key2 int, key3 int)
  AS '$libdir/tablefunc','crosstab_hash' LANGUAGE C STABLE STRICT;

Telepon:

SELECT * FROM f_cross_test_db(
      'SELECT kernel_id, key, value FROM test_db ORDER BY 1,2'
     ,'SELECT DISTINCT key FROM test_db ORDER BY 1');

Perhatikan bahwa Anda perlu membuat crosstab_hash yang berbeda fungsi untuk setiap crosstab fungsi dengan tipe pengembalian yang berbeda.

Terkait:

  • PostgreSQL baris ke kolom

Anda berfungsi untuk menghasilkan daftar kolom agak berbelit-belit, hasilnya salah (int hilang setelah kernel_id ), dapat diganti dengan kueri SQL ini:

SELECT 'kernel_id int, '
       || string_agg(DISTINCT key::text, ' int, '  ORDER BY key::text)
       || ' int, DUMMY text'
FROM   test_db;

Dan itu tidak dapat digunakan secara dinamis.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat terhubung ke postgres dari host jarak jauh

  2. Bermigrasi dari DB2 ke PostgreSQL - Yang Harus Anda Ketahui

  3. Masukkan jika tidak ada, jika tidak kembalikan id di postgresql

  4. Apa yang harus dilakukan dengan nilai nol saat pemodelan dan normalisasi?

  5. Gambaran Umum Parameter Koneksi PostgreSQL 13 libpq sslpassword