Diberikan dua tabel dengan jumlah baris yang tidak ditentukan dengan nama dan nilai, bagaimana saya akan menampilkan pivot CROSS JOIN
dari fungsi di atas nilainya.
CREATE TEMP TABLE foo AS
SELECT x::text AS name, x::int
FROM generate_series(1,10) AS t(x);
CREATE TEMP TABLE bar AS
SELECT x::text AS name, x::int
FROM generate_series(1,5) AS t(x);
Misalnya, jika fungsi itu adalah perkalian, bagaimana saya menghasilkan tabel (perkalian) seperti di bawah ini,
Semua (arg1,arg2,result)
baris tersebut dapat dibuat dengan
SELECT foo.name AS arg1, bar.name AS arg2, foo.x*bar.x AS result
FROM foo
CROSS JOIN bar;
Jadi ini hanya masalah presentasi, saya ingin ini juga bekerja dengan nama kustom - nama yang tidak hanya argumen CAST
ed ke teks tetapi diatur dalam tabel,
CREATE TEMP TABLE foo AS
SELECT chr(x+64) AS name, x::int
FROM generate_series(1,10) AS t(x);
CREATE TEMP TABLE bar AS
SELECT chr(x+72) AS name, x::int
FROM generate_series(1,5) AS t(x);
Saya pikir ini akan mudah dilakukan dengan CROSSTAB yang mampu tipe kembali yang dinamis.
SELECT * FROM crosstab(
'
SELECT foo.x AS arg1, bar.x AS arg2, foo.x*bar.x
FROM foo
CROSS JOIN bar
', 'SELECT DISTINCT name FROM bar'
) AS **MAGIC**
Tapi, tanpa itu **MAGIC**
, aku mengerti
ERROR: a column definition list is required for functions returning "record" LINE 1: SELECT * FROM crosstab(
Untuk referensi, menggunakan contoh di atas dengan nama ini adalah sesuatu yang lebih seperti apa tablefunc
's crosstab()
keinginan.
SELECT * FROM crosstab(
'
SELECT foo.x AS arg1, bar.x AS arg2, foo.x*bar.x
FROM foo
CROSS JOIN bar
'
) AS t(row int, i int, j int, k int, l int, m int);
Tapi, sekarang kita kembali membuat asumsi tentang konten dan ukuran bar
tabel dalam contoh kita. Jadi jika,
- Tabel panjangnya tidak ditentukan,
- Kemudian cross-join mewakili kubus dimensi yang tidak ditentukan (karena di atas),
- Nama-nama katagori (istilah tabulasi silang) ada di tabel
Apa yang terbaik yang dapat kita lakukan di PostgreSQL tanpa "daftar definisi kolom" untuk menghasilkan presentasi seperti itu?