Dato due tabelle con un conteggio di righe indefinito con un nome e un valore, come visualizzerei un pivot CROSS JOINdi 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 CASTtesto 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ò tablefuncche 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 bartabella 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?
