Gunakan crosstab()
dari tablefunc modul tambahan.
Kesulitan khusus di sini adalah bahwa "nama baris" terdiri dari dua kolom. Saya menggabungkan untuk tujuan kueri dan tidak menampilkan kolom gabungan di akhir.
Dengan asumsi fn
dan ln
adalah NOT NULL
. Belum diuji:
SELECT fn, ln, cat1, cat2
FROM crosstab(
'SELECT fn || ln AS row_name, fn, ln, file_type, attribute
FROM t
ORDER BY fn, ln, file_type'
,$$VALUES ('cat1'::text), ('cat2')$$)
AS t (row_name text, fn text, ln int, cat1 text, cat2 text);
Opsi lain adalah menambahkan "nama baris" pengganti dengan fungsi jendela seperti dense_rank()
dan perlakukan dua kolom yang ditentukan sebagai "kolom tambahan". Contoh:
- Kueri tab silang postgresql dengan beberapa kolom "nama baris"
Dasar-dasar:
- Kueri Tab Silang PostgreSQL