ho attualmente una tabella m
del seguente formato:funzione Crosstab in Postgres restituire un uscita una riga quando mi aspetto più righe
id scenario period ct
2 1 1 1
2 1 2 1
2 1 3 1
2 1 4 1
2 2 1 1
2 2 2 1
2 2 3 1
2 2 4 1
2 3 1 1
2 3 2 1
2 3 3 1
2 3 4 1
voglio creare la seguente tabella:
id scenario period 1 2 3 4
2 1 1 1
2 1 2 1
2 1 3 1
2 1 4 1
2 2 1 1
2 2 2 1
2 2 3 1
2 2 4 1
2 3 1 1
2 3 2 1
2 3 3 1
2 3 4 1
L'estensione tablefunc è già stata creata nel mio database Postgres. Attualmente sto cercando di utilizzare la funzione crosstab()
per completare il pivot. Tuttavia, sto diventando un tavolo che è simile al seguente:
id scenario period 1 2 3 4
2 1 1 1 1 1 1
La query ho provato:
SELECT * FROM crosstab(
'SELECT id, scenario, period, ct FROM m
ORDER BY 1',
'SELECT DISTINCT period FROM m
ORDER BY 1')
AS (id, scenario, period, 1, 2, 3, 4);
La query presentata non è valida. (l'elenco di definizioni di colonne manca di tipi di dati). Qual è la query effettiva che hai provato? –
Il mio set di dati è molto più grande, ma volevo un esempio più semplice da mostrare. Credo che la domanda più corretta sarebbe: SELECT * FROM a campi incrociati ( \t \t 'SELECT id, scenario, periodo, CT da m \t \t \t ORDER BY 1', \t \t 'Seleziona il periodo DISTINTO DA m \t \t \t ORDINA DA 1 ') AS (id int, scenario int, periodo int, "1" int, "2" int, "3" int, "4" int); –