Sono nuovo di PostgreSQL.Come fare pivoting in PostgreSQL
Supponiamo che io ho una tabella come sotto
colorname Hexa rgb rgbvalue
Violet #8B00FF r 139
Violet #8B00FF g 0
Violet #8B00FF b 255
Indigo #4B0082 r 75
Indigo #4B0082 g 0
Indigo #4B0082 b 130
Blue #0000FF r 0
Blue #0000FF g 0
Blue #0000FF b 255
Se faccio un pivot in SQL Server come
SELECT colorname,hexa,[r], [g], [b]
FROM
(SELECT colorname,hexa,rgb,rgbvalue
FROM tblPivot) AS TableToBePivoted
PIVOT
(
sum(rgbvalue)
FOR rgb IN ([r], [g], [b])
) AS PivotedTable;
ho l'uscita come
colorname hexa r g b
Blue #0000FF 0 0 255
Indigo #4B0082 75 0 130
Violet #8B00FF 139 0 255
Come fare il lo stesso usando PostgreSQL?
Il mio tentativo è
SELECT *
FROM crosstab
(
'SELECT
colorname
,hexa
,rgb
,rgbvalue
FROM tblPivot'
)AS ct(colorname text, hexa text, rgb text, rgbvalue int);
Ma geting errore:
ERROR: function crosstab(unknown) does not exist
LINE 2: FROM crosstab
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
********** Error **********
ERROR: function crosstab(unknown) does not exist**
C'è un modo elegante di farlo in PostgreSQL (qualsiasi Costruito nella funzione ...) Qual è la prassi standard così facendo ?
Ma perché a campi incrociati didnot lavoro ... non che non supporta in la versione corrente che sto usando? –
'crosstab()' appartiene al modulo 'tablefunc'. Dovrai abilitarlo usando 'CREATE EXTENSION'. Detto ciò; la convenienza che offre potrebbe non essere così eccezionale; postgresql è straordinariamente bravo a ottimizzare i join, e questo tipo di codice sarà più riconoscibile su più database e più sviluppatori. – SingleNegationElimination
Se fai un sacco di roba crosstab, il modulo contrib di tablefunc può essere ottimo. Se sei su Ubuntu, puoi aggiungere le funzioni tablefunc a un db facendo ciò: psql dbname -f /usr/share/postgresql/8.4/contrib/tablefunc.sql o qualcosa di simile. –