Dato due tabelle con un conteggio di righe indefinito con un nome e un valore, come visualizzerei un pivot CROSS JOIN
di una funzione sui loro valori.
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);
Ad esempio, se quella funzione fosse la moltiplicazione, come avrei generato una tabella (moltiplicazione) come quella qui sotto,
Tutte queste (arg1,arg2,result)
righe possono essere generate con
SELECT foo.name AS arg1, bar.name AS arg2, foo.x*bar.x AS result
FROM foo
CROSS JOIN bar;
Quindi questa è solo una questione di presentazione, mi piacerebbe che funzionasse anche con un nome personalizzato , un nome che non è semplicemente l'argomento del CAST
testo ma impostato nella tabella,
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);
Penso che questo sarebbe facilmente fattibile con un CROSSTAB capace di un tipo di ritorno dinamico.
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**
Ma, senza il **MAGIC**
, capisco
ERROR: a column definition list is required for functions returning "record" LINE 1: SELECT * FROM crosstab(
Per riferimento, usando gli esempi precedenti con nomi questo è qualcosa di più simile a ciò tablefunc
che crosstab()
vuole.
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);
Ma ora siamo tornati a fare ipotesi sul contenuto e le dimensioni della bar
tabella nel nostro esempio. Quindi se,
- Le tabelle sono di lunghezza indefinita,
- Quindi il cross-join rappresenta un cubo di dimensione indefinita (a causa di sopra),
- I nomi delle categorie (linguaggio incrociato) sono nella tabella
Qual è il meglio che possiamo fare in PostgreSQL senza un "elenco di definizioni di colonne" per generare quel tipo di presentazione?