Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde,
Estou trabalhando em uma parte do meu sistema onde eu gero gráficos com informações que vem do banco de dados. Resumidamente eu pego as informações por mês, por em alguns meses não tem informações lançadas no banco, sendo assim ele não exibe o mês em si, mais eu preciso que ele mostre o mês e o valor em R$ 0,00.
Exemplo:
SELECT concat(MONTH(vencimento), '-' ,YEAR(vencimento)) as data, sum(valor) as valor FROM contas_pagar WHERE cod_tipo_conta = 3 AND vencimento BETWEEN ('2016/04/01') AND ('2016/07/30') GROUP BY MONTH(vencimento);
Essa é a resposta do banco:
data valor
4-2016 2353.21
5-2016 190.00
6-2016 576.20
7-2016 823.67
Até ai tudo certo, porém quando eu faço o select e em um dos meses não possui nenhum dado no banco ele retorna assim:
data valor
4-2016 2353.21
5-2016 190.00
7-2016 823.67
Notem que ele pulou o mês 6-2016 e assim não consigo manipular no meu gráfico, preciso que ele retorne o mês com o valor 0, conforme exemplo abaixo:
data valor
4-2016 2353.21
5-2016 190.00
6-2016 0.00
7-2016 823.67
Obrigado a todos !
Bom dia Motta,
Dei uma olhada no Post que me enviou, fiz uns testes desta forma, porem pelo que eu entendi, até dando uma pesquisada é que posso setor como 0 onde não estiver registro. Porem o que ocorre é que o valor tem que ficar zero, mais a data eu não posso setar como "0" ele tem que mostrar a data do mês...
Então se não encontra o registro deve mostrar:
Data valor
05/2016 0
Porem não sei se fiz certo.
Eu pensei fazer de outra forma, mais isso me parece muita gambiarra...
Recebendo o período de meses no PHP eu faço um "for" e cada mês vou buscando a informação no banco e montando em um array, o problema é que vou fazer diversas requisições para o banco....
Mais pensando por outro lado este relatório vai pegar no máximo 12 meses e não é muito acessado, mais não me conforta saber que estou fazendo gambiarra.
http://forum.imasters.com.br/topic/542198-incrementar-semanas/
Este é o ponto SQL só trásvalores existentes para trazer valores não existentes é preciso fazer uso de um artifício , uma solução que já fiz (Oracle) foi gerar uma sequencia e montar datas , amanhã posto um exemplo.
Veja se ajuda.
http://forum.imasters.com.br/topic/467840-resolvidoselect-com-group-by-mesmo-sem-registro-correspondente/