Juniorcase whenpivotagregação

CASE WHEN para pivotar dados

Publicado em 2025-02-22

Pergunta

Como transformar linhas em colunas (pivot) usando apenas CASE WHEN?

Explicação

Nem todo SGBD tem PIVOT nativo. Combinar CASE WHEN com SUM ou MAX dentro de um GROUP BY permite pivotar valores categóricos para colunas.

Query SQL

sql
SELECT
  produto,
  SUM(CASE WHEN canal = 'web'     THEN receita END) AS receita_web,
  SUM(CASE WHEN canal = 'mobile'  THEN receita END) AS receita_mobile,
  SUM(CASE WHEN canal = 'loja'    THEN receita END) AS receita_loja
FROM vendas
GROUP BY produto;

Resposta esperada

Uma linha por produto, com colunas separadas para cada canal de venda.

Erros comuns

  • Usar COUNT(CASE WHEN ... ) sem ELSE 0 e contar NULLs incorretamente
  • Não envolver o CASE em uma função agregadora, gerando erro de GROUP BY

Dica de entrevista

Para conjuntos pequenos e estáveis de categorias, CASE WHEN é mais legível que PIVOT.

Compartilhar: