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