Este é um pedido comum. É chamado de consulta dinâmica ou de tabela cruzada. O PostgreSQL não possui nenhuma sintaxe interna legal para ele, mas você pode usar a
crosstab
função do tablefunc
módulo para fazer o que você quer
. Para mais informações, pesquise Stack Overflow por
[postgresql] [pivot]
ou [postgresql] [crosstab]
. Alguns sistemas de banco de dados relacionais oferecem uma boa maneira de fazer isso com uma consulta embutida, mas o PostgreSQL ainda não oferece.