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

campi incrociati con 2 (o più) nomi di riga

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