sql >> Database >  >> RDS >> PostgreSQL

kruistabel met 2 (of meer) rijnamen

Gebruik crosstab() uit de extra module tablefunc.

De specifieke moeilijkheid hier is dat de "rijnaam" uit twee kolommen bestaat. Ik voeg samen voor het doel van de zoekopdracht en geef de samengevoegde kolom aan het einde niet weer.
Ervan uitgaande dat fn en ln zijn NOT NULL . Niet getest:

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);

Een andere optie zou zijn om een ​​surrogaat "rijnaam" toe te voegen met een vensterfunctie zoals dense_rank() en behandel de twee definiërende kolommen als "extra kolommen". Voorbeeld:

  • Postgresql-kruistabelquery met meerdere "rijnaam"-kolommen

Basis:

  • PostgreSQL-kruistabelquery


  1. Tel met IF-voorwaarde in MySQL-query

  2. PostgreSQL hoe u kunt zien welke query's zijn uitgevoerd

  3. Synchroniseer offline SQLite-database met online MySQL-database

  4. Hoe haal ik het eerste en laatste record van een gegroepeerd record op in een MySQL-query met geaggregeerde functies?