Usar crosstab()
desde el módulo adicional tablefunc.
La dificultad específica aquí es que el "nombre de la fila" consta de dos columnas. Concateno para el propósito de la consulta y no muestro la columna concatenada al final.
Suponiendo fn
y ln
son NOT NULL
. Sin probar:
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);
Otra opción sería agregar un "nombre de fila" sustituto con una función de ventana como dense_rank()
y trate las dos columnas de definición como "columnas adicionales". Ejemplo:
- Consulta de tabulación cruzada de Postgresql con múltiples columnas de "nombre de fila"
Conceptos básicos:
- Consulta de tabulación cruzada de PostgreSQL