Soy nuevo en PostgreSQL.Cómo hacer un pivote en PostgreSQL
Supongamos que tengo una tabla como bajo
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
Si hago un pivote en SQL Server como
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;
consigo la salida como
colorname hexa r g b
Blue #0000FF 0 0 255
Indigo #4B0082 75 0 130
Violet #8B00FF 139 0 255
Cómo hacer el lo mismo usando PostgreSQL?
Mi intento es
SELECT *
FROM crosstab
(
'SELECT
colorname
,hexa
,rgb
,rgbvalue
FROM tblPivot'
)AS ct(colorname text, hexa text, rgb text, rgbvalue int);
Pero que consigue error:
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**
¿Hay alguna manera elegante de hacerlo en PostgreSQL (ninguna función integrada ...) ¿Cuál es la práctica habitual de haciéndolo ?
Pero por qué tabla de referencias cruzadas didnot trabajo ... ¿no se apoyan en la versión actual que estoy usando? –
'crosstab()' pertenece al módulo 'tablefunc'. Tendrás que habilitarlo usando 'CREATE EXTENSION'. Eso dicho; la comodidad que ofrece puede no ser tan buena; postgresql es fantásticamente bueno para optimizar uniones, y este tipo de código será más reconocible en más bases de datos y para más desarrolladores. – SingleNegationElimination
Si haces MUCHA tabla cruzada, el módulo contrib de tablefunc puede ser genial. Si está en Ubuntu, puede agregar funciones de tabla a una base de datos haciendo esto: psql nombre_bd -f/usr/share/postgresql/8.4 /contrib/tablefunc.sql o algo similar. –