PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

tableau croisé avec 2 noms de lignes (ou plus)

Utilisez crosstab() du module supplémentaire tablefunc.

La difficulté spécifique voici que le "nom de ligne" se compose de deux colonnes. Je concatène pour les besoins de la requête et n'affiche pas la colonne concaténée à la fin.
En supposant fn et ln sont NOT NULL . Non testé :

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

Une autre option serait d'ajouter un "nom de ligne" de substitution avec une fonction de fenêtre comme dense_rank() et traitez les deux colonnes de définition comme des "colonnes supplémentaires". Exemple :

  • Requête croisée Postgresql avec plusieurs colonnes "nom de ligne"

Notions de base :

  • Requête croisée PostgreSQL