PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Kreuztabelle mit 2 (oder mehr) Zeilennamen

Verwenden Sie crosstab() aus dem Zusatzmodul tablefunc.

Die spezifische Schwierigkeit Hier ist, dass der "Zeilenname" aus zwei Spalten besteht. Ich verkette zum Zwecke der Abfrage und zeige die verkettete Spalte am Ende nicht an.
Angenommen fn und ln sind NOT NULL . Ungetestet:

SELECT fn, ln, cat1, cat2
FROM crosstab(
       'SELECT fn || ln AS row_name, fn, ln, file_type, attribute
        FROM   t
        ORDER  BY fn, ln, file_type'

      ,$$VALUES ('cat1'::text), ('cat2')$$)
AS t (row_name text, fn text, ln int, cat1 text, cat2 text);

Eine andere Option wäre das Hinzufügen eines Ersatz-"Zeilennamens" mit einer Fensterfunktion wie dense_rank() und behandeln Sie die beiden definierenden Spalten als "zusätzliche Spalten". Beispiel:

  • Postgresql-Kreuztabellenabfrage mit mehreren "Zeilennamen"-Spalten

Grundlagen:

  • PostgreSQL-Kreuztabellenabfrage