sql >> Base de Datos >  >> RDS >> PostgreSQL

tabulación cruzada con 2 (o más) nombres de fila

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