Wie zu tun Schwenken in PostgreSQL
Ich bin neu in PostgreSQL.
Angenommen ich habe eine Tabelle wie unter
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
Wenn ich einen Pivot in SQL Server als
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;
Bekomme ich die Ausgabe wie
colorname hexa r g b
Blue #0000FF 0 0 255
Indigo #4B0082 75 0 130
Violet #8B00FF 139 0 255
Wie das gleiche zu tun mit PostgreSQL?
Mein Versuch
SELECT *
FROM crosstab
(
'SELECT
colorname
,hexa
,rgb
,rgbvalue
FROM tblPivot'
)AS ct(colorname text, hexa text, rgb text, rgbvalue int);
Aber geting Fehler:
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**
Gibt es eine elegante Möglichkeit, dies zu tun in PostgreSQL (jede eingebaute Funktion...), Was ist die gängige Praxis, dies zu tun ?
InformationsquelleAutor priyanka.sarkar | 2011-09-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann dies ausgedrückt werden als JOIN:
crosstab()
gehört zu dentablefunc
Modul. Sie haben, um es zu aktivieren mitCREATE EXTENSION
. Das heißt, die Bequemlichkeit, die es bietet kann nicht sein, dass große; postgresql ist traumhaft gut bei der Optimierung von joins, und diese Art von code wird mehr erkennbar auf mehrere Datenbanken und weitere Entwickler.Wenn Sie eine MENGE der Kreuztabelle Sachen, die tablefunc contrib-Modul kann großartig sein. Wenn Sie auf Ubuntu, können Sie hinzufügen tablefunc Funktionen db dies zu tun: psql dbname -f /usr/share/postgresql/8.4/contrib/tablefunc.sql oder ähnliches.
Ich "glaube" die erste Zeile sollte ", WÄHLEN Sie c.colorname, c.hexa, r.rgbvalue-Parameter, g.rgbvalue-Parameter, b.rgbvalue-Parameter" anstelle, aber ansonsten +1 für diese Antwort.
InformationsquelleAutor SingleNegationElimination
Führen Sie diese
und versuchen Sie die Abfrage ausführen
ERROR: extension "tablefunc" already exists
aber wenn ich versuche, es zu benutzen, bekomme ichERROR: function crosstab(unknown) does not exist
. Ich bin mit Postgres 9.2.1 auf Mac 10.9.2. Irgendwelche Ideen?Stellen Sie sicher, dass Sie die Verbindung zu Ihrer Datenbank mit \c db_name und führen Sie dann den Befehl oben.
Antwort hat die Antwort auf die Frage in der @Black ' s Kommentar.
InformationsquelleAutor Laxmikant Dange