sql >> Database teknologi >  >> RDS >> PostgreSQL

krydstabulator med 2 (eller flere) rækkenavne

Brug crosstab() fra ekstra modul tablefunc.

Den specifikke sværhedsgrad her er, at "rækkenavnet" består af to kolonner. Jeg sammenkæder med henblik på forespørgslen og viser ikke den sammenkædede kolonne i slutningen.
Under forudsætning af fn og ln er NOT NULL . Ikke testet:

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

En anden mulighed ville være at tilføje et surrogat "rækkenavn" med en vinduesfunktion som dense_rank() og behandle de to definerende kolonner som "ekstra kolonner". Eksempel:

  • Postgresql krydstabulatorforespørgsel med flere "rækkenavn"-kolonner

Grundlæggende:

  • PostgreSQL krydstabulatorforespørgsel


  1. Indsættelse af flere rækker i Oracle

  2. Azure Automation Methods

  3. Sammenfletning af sammenkædning af JSON(B)-kolonner i forespørgsel

  4. Hvordan udfører man IF-sætning i SQL?