Usa crosstab()
dal modulo aggiuntivo tablefunc.
La difficoltà specifica ecco che il "nome riga" è composto da due colonne. Concateno ai fini della query e non visualizzo la colonna concatenata alla fine.
Supponendo fn
e ln
sono NOT NULL
. Non testato:
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);
Un'altra opzione sarebbe quella di aggiungere un "nome riga" surrogato con una funzione della finestra come dense_rank()
e tratta le due colonne che definiscono come "colonne extra". Esempio:
- Query a campi incrociati Postgresql con più colonne "nome riga"
Nozioni di base:
- Query a campi incrociati PostgreSQL