maneira correta de criar uma tabela dinâmica no postgresql usando CASE WHEN
Use MAX() ou MIN(), não FIRST(). Nesse cenário, você terá todos os NULLs na coluna por valor de cada grupo, exceto, no máximo, um com valor não nulo. Por definição, este é o MIN e o MAX desse conjunto de valores (todos os nulos são excluídos).