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

Baris PostgreSQL ke kolom

Pertama, crosstab() keluarga fungsi tidak diinstal di PostgreSQL standar. Anda perlu menginstal ekstensi tablefunc untuk ini. Di PostgreSQL 9.1 Anda cukup:

CREATE EXTENSION tablefunc;

Untuk versi yang lebih lama, lihat jawaban terkait ini.

Kueri

Kueri dapat terlihat seperti ini:

SELECT *
FROM   crosstab (
        'SELECT l.id
               ,c.column_name
               ,c.data
         FROM   custom_columns_table c
         JOIN   list_table l ON l.id = c.list_id
         ORDER  BY 1',

        'SELECT DISTINCT column_name
         FROM   custom_columns_table
         ORDER  BY 1')
AS tbl (
    id integer
   ,email text
   ,name text
   );

Saya menggunakan bentuk crosstab() dengan dua parameter, karena itu memungkinkan atribut yang hilang. Seperti, ketika seseorang tidak memiliki email. Maka formulir ini akan mengembalikan NULL untuk email kolom. Penjelasan detail:

  • Kueri Tab Silang PostgreSQL

Fungsi

Atau buat fungsi sehingga Anda tidak perlu menyediakan daftar definisi kolom untuk setiap panggilan:

CREATE OR REPLACE FUNCTION f_mycross(text, text)
  RETURNS TABLE (
    id integer
   ,email text
   ,name text)
  AS '$libdir/tablefunc','crosstab_hash' LANGUAGE C STABLE STRICT;

Telepon:

SELECT * FROM f_mycross(
       'SELECT l.id
              ,c.column_name
              ,c.data
        FROM   custom_columns_table c
        JOIN   list_table l ON l.id = c.list_id
        ORDER  BY 1',
    
       'SELECT DISTINCT column_name
        FROM   custom_columns_table
        ORDER  BY 1')



  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 PostgreSQL menerapkan batasan UNIK / jenis indeks apa yang digunakannya?

  2. Periksa target statistik di PostgreSQL

  3. Solusi Cloud PostgreSQL Terkelola Benchmarking:Bagian Kedua - Amazon RDS

  4. Fungsi dijalankan lebih cepat tanpa pengubah STRICT?

  5. Penjajaran planet