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