Ir ao conteúdo
  • Cadastre-se

Preenchendo select com valor 0 onde não encontra


Posts recomendados

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 !

Link para o comentário
Compartilhar em outros sites

  • Moderador

@denismartos Olá,  se o registro da data existir mas o valor está vazio, você pode setar o valor para zero.

Não testei mas tenta algo parecido com isso:

UPDATE contas_pagar SET valor = 0.00 WHERE valor = NULL 

Isso é só um exemplo não copie e cole. 

O objetivo é setar 0.00 no campo valor em cada registro que ele encontrar com o campo valor nulo.

 

 

Link para o comentário
Compartilhar em outros sites

No banco Oracle e mySQL você pode usar o Nvl, onde o valor FOR NULL será colocado ZERO.
Exemplo: Nvl(valor,0)

SELECT concat(MONTH(vencimento), '-' ,YEAR(vencimento)) as data,  sum(Nvl(valor,0)) as valor
FROM contas_pagar 
WHERE cod_tipo_conta = 3 
AND vencimento BETWEEN ('2016/04/01') AND ('2016/07/30')
GROUP BY MONTH(vencimento);

 

No banco Postgre você pode usar o coalesce, onde o valor FOR NULL será colocado ZERO.
Exemplo: coalesce(valor,0)


 

SELECT concat(MONTH(vencimento), '-' ,YEAR(vencimento)) as data, sum(coalesce(valor,0)) as valor
FROM contas_pagar 
WHERE cod_tipo_conta = 3 
AND vencimento
BETWEEN ('2016/04/01') AND ('2016/07/30')
GROUP BY MONTH(vencimento);

 

Link para o comentário
Compartilhar em outros sites

Boa tarde,

 

O problema é que o registro não existe no banco, esta parte do sistema é um cadastro de contas e tem alguns meses que tem tipos de contas que não são cadastradas, então esse registro não existe para o período especifico, mais eu preciso que ele retorne o select mostrando a data daquele período e o valor em 0 reais.

Seria algo como, se não achar registros nesta data, coloque a data e o valor 0 ou apenas mostre a data pois o valor em manipulo no php.

 

Devido a isso não consigo fazer isso que você sugeriu dif, pois não há registros para dar update.

 

Willian Faria, deu uma olhada nessa função que mencionou e ainda achei algumas outras do mySql, porém aconteceu a mesma coisa, como ele não acha registros no periodo então não existe nem valores nulos, desta forma não consigo aplicar ela.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...