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