PIVOT no SQL Server transpõe valores de uma coluna em colunas fixas. No PostgreSQL a técnica equivalente é agregação condicional com CASE WHEN dentro de SUM/MAX/COUNT.
Antes — PIVOT no SQL Server
SELECT * FROM (SELECT regiao, trimestre, receita FROM faturamento) s PIVOT (SUM(receita) FOR trimestre IN ([Q1],[Q2],[Q3])) p;
Depois — CASE WHEN no PostgreSQL
Cuidado com o GROUP BY: toda coluna não agregada precisa aparecer no grupo. Erros de 'column must appear in GROUP BY' são o sintoma clássico de PIVOT convertido na mão.
SELECT regiao, SUM(CASE WHEN trimestre = 'Q1' THEN receita END) AS q1, SUM(CASE WHEN trimestre = 'Q2' THEN receita END) AS q2, SUM(CASE WHEN trimestre = 'Q3' THEN receita END) AS q3 FROM faturamento GROUP BY regiao;