Ir ao conteúdo
  • Cadastre-se
denismartos

Preenchendo select com valor 0 onde não encontra

Recommended Posts

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 !

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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.

 

 

Compartilhar este post


Link para o post
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);

 

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×