SQL Server → PostgreSQL

Como traduzir PIVOT do SQL Server para PostgreSQL usando CASE WHEN

PostgreSQL não tem PIVOT nativo como o SQL Server. Reescreva matrizes de relatório com SUM(CASE WHEN ...) e GROUP BY.

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;

Analisador de Impacto

Converter PIVOT manualmente é chato e gera erros de agrupamento. Deixe nossa ferramenta fazer a transposição estrutural para você.

Abrir Análise de Projeto →