1
resposta

Preencher campo com zero em caso de não achar informação

Eu fiz uma query para calcular o acumulado de quantidades vendidas por mês. Mas caso a empresa tivesse vendido nada em certos meses - p.e., o mês de Janeiro nem aparecesse na tabela itens_notas_fiscais - eu gostaria de preencher com zero. Como eu faria?

SELECT MONTH(NF1.DATA_VENDA) AS MES,
SUM(INF1.QUANTIDADE) AS Monthly_Sales,
(SELECT SUM(INF2.QUANTIDADE)
FROM itens_notas_fiscais INF2
INNER JOIN notas_fiscais NF2
ON INF2.NUMERO = NF2.NUMERO
WHERE MONTH(NF2.DATA_VENDA) <= MONTH(NF1.DATA_VENDA)) AS cumulative_sum
FROM itens_notas_fiscais INF1
INNER JOIN notas_fiscais NF1
ON INF1.NUMERO = NF1.NUMERO
GROUP BY MONTH(NF1.DATA_VENDA)
ORDER BY MONTH(NF1.DATA_VENDA) ASC;
1 resposta

Olá Priscila, tudo bem? Não entendi bem sua query Pricila, você quer como resultado um valor acumulado por mêses é isso? Porém você não está considerando o ano, então dessa forma, você está somando os valores do mês de janeiro de 2015 com os de janeiro de 2016 e assim sucessivamente, é esse comportamento mesmo que você deseja? Ou você que um valor acumulado por mês separado, em relação ao ano?

Respondendo sua dúvida, nesse caso, para mostrar o zero nos meses em que não houve vendas, teríamos que primeiro retornar na consulta todos os meses independentemente da venda ou não, porém como não existe venda, então o mês não existe na tabela de notas fiscais que é onde tem a informação da DATA_VENDA, então a solução para isso seria uma Stored Procedures que seria responsável por realizar loop desde da data mais antiga até a data mais recente (na tabela de notas fiscais) fazendo o SUM de acordo com o mês e ano, porém esse conceito de Stored Procedures, você só vai ver mais adiante na formação de SQL com MySQL Server da Oracle. Acho que você pode continuar estudando e quando aprender sobre Procedures , você pode voltar nessa query e tenta refazê-la com esse novo conceito.

Espero ter ajudado!