Consulta SQL para Comparar Vendas de Produtos por Mês: Um Guia

Quando se trata de gerenciar dados de vendas de produtos, ter uma compreensão clara de como comparar os dados mensais de vendas ao longo dos anos é crucial para relatórios eficazes. Se você está gerenciando uma loja de varejo ou analisando dados de vendas para uma entidade corporativa, ser capaz de identificar rapidamente tendências de vendas pode fornecer insights valiosos. Neste post, exploraremos como construir uma consulta SQL para comparar as vendas de produtos por mês em dois anos consecutivos, garantindo que os meses com zero vendas sejam claramente exibidos.

Entendendo o Problema

Você pode se deparar com um cenário em que possui um conjunto de dados estruturado da seguinte forma:

Categoria | Receita  | Ano | Mês
Bikes     | 10,000   | 2008 | 1
Bikes     | 12,000   | 2008 | 2
Bikes     | 12,000   | 2008 | 3
Bikes     | 15,000   | 2008 | 4
Bikes     | 11,000   | 2007 | 2
Bikes     | 11,500   | 2007 | 3
Bikes     | 15,400   | 2007 | 4

Com este conjunto de dados, você deseja gerar um relatório que compara a receita gerada de janeiro a dezembro para os anos de 2007 e 2008. O objetivo é preencher quaisquer meses sem vendas com um ‘0’ em ambas as colunas, criando uma paisagem comparativa mais clara para a tomada de decisões.

A saída desejada pode se parecer com isto:

Categoria | Mês | Receita Este Ano | Receita Ano Passado
Bikes     | 1   | 10,000           | 0
Bikes     | 2   | 12,000           | 11,000
Bikes     | 3   | 12,000           | 11,500
Bikes     | 4   | 0                | 15,400

Construindo a Consulta SQL

Para atingir isso, utilizaremos a poderosa declaração CASE do SQL em combinação com as funções de agregação apropriadas. Precisaremos também configurar uma tabela auxiliar que inclua todos os meses para os quais desejamos dados de vendas, mesmo quando não há vendas registradas.

Passo 1: Configurando suas Tabelas

Você deve ter as seguintes tabelas à sua disposição:

  • Tabela de Vendas: Contém dados sobre categorias, receitas, anos e meses.
  • Tabela de Tempo (tm): Esta contém todas as combinações possíveis de anos e meses que você deseja relatar.

Passo 2: Estrutura Básica da Consulta

Aqui está uma consulta SQL simplificada para buscar vendas de produtos sem linhas vazias:

SELECT
    Categoria,
    Mês,
    SUM(CASE WHEN ANO = 2008 THEN Receita ELSE 0 END) AS Receita_Este_Ano,
    SUM(CASE WHEN ANO = 2007 THEN Receita ELSE 0 END) AS Receita_Ano_Passado
FROM
    vendas
WHERE
    ANO IN (2008, 2007)
GROUP BY
    Categoria,
    Mês
ORDER BY
    Mês;

Explicação:

  • SUM com CASE: Isso soma as receitas para cada ano com base nas condições especificadas – permitindo que você diferencie entre os dois anos.
  • Agrupamento: Os resultados são organizados por Categoria e Mês para maior clareza.

Passo 3: Incluindo Linhas Vazias

Se você deseja incluir meses com zero vendas, a consulta deve ser ajustada para garantir que ela puxe dados tanto da tabela vendas quanto da tabela tm. Veja como:

SELECT
    preencher.Categoria,
    preencher.Mês,
    SUM(CASE WHEN ANO = 2008 THEN Receita ELSE 0 END) AS Receita_Este_Ano,
    SUM(CASE WHEN ANO = 2007 THEN Receita ELSE 0 END) AS Receita_Ano_Passado
FROM
    vendas
RIGHT JOIN (SELECT DISTINCT Categoria, Ano, Mês FROM vendas CROSS JOIN tm) AS preencher
ON preencher.Categoria = vendas.Categoria AND preencher.Ano IN (2008, 2007)
GROUP BY
    preencher.Categoria,
    preencher.Mês
ORDER BY
    preencher.Mês;

Explicação:

  • RIGHT JOIN: Isso garante que todos os meses da tabela tm sejam incluídos, mesmo aqueles sem dados de vendas.
  • Agrupamento e Ordenação: Manter o mesmo agrupamento e ordenação ajuda na elaboração de um relatório claro.

Conclusão

Ao empregar as técnicas demonstradas neste artigo, você será capaz de gerar efetivamente um relatório comparando as vendas dos produtos por mês ao longo de diferentes anos, mesmo contabilizando vendas zero. Essa abordagem não apenas auxilia na análise abrangente de dados, mas também aprimora as capacidades gerais de relatórios.

Para leituras adicionais e funcionalidades avançadas, considere examinar recursos adicionais sobre o uso de declarações CASE e PIVOT no SQL Server 2005 para necessidades de relatórios mais complexas. Boas consultas!