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