PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

crosstab com 2 (ou mais) nomes de linha


Use crosstab() do módulo adicional tablefunc.

A dificuldade específica aqui é que o "nome da linha" consiste em duas colunas. Eu concateno para o propósito da consulta e não mostro a coluna concatenada no final.
Assumindo fn e ln são NOT NULL . Não testado:
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);

Outra opção seria adicionar um "nome de linha" substituto com uma função de janela como dense_rank() e trate as duas colunas definidoras como "colunas extras". Exemplo:
  • Consulta de tabela cruzada Postgresql com várias colunas "nome da linha"

Fundamentos:
  • Consulta de tabela cruzada PostgreSQL