Select - Retornando 0
23/03/2006
0
Como posso fazer um select que mostre o valor 0(zero) caso seja nulo:
Teria como eu usar um if aqui dentro (cre.valor). if cre.valor is null then cre.valor := 0. Algo parecido.
select sum(cre.valor) from lancamentocont cre where cre.data < :datainicio and cre.tipodolancamento = 1
Obrigdo a todos,
Rodrigo.
Rodrigorpb
Posts
23/03/2006
Aroldo Zanela
Cada banco implementa isso de forma parecida, ou seja, uma função específica. Qual SGBDR que você está utilizando?
23/03/2006
Arc
select sum(isnull(cre.valor,0))
from lancamentocont cre
where cre.data < :datainicio
and cre.tipodolancamento = 1
23/03/2006
Rodrigorpb
Seria isto mesmo que eu quero, que quando for null ele recebece 0(zero).
Rodrigo.
23/03/2006
Aroldo Zanela
Você deve instalar a fbudf para utilizar as funções de tratamento de Nulls no firebird. Note que ele possui uma função específica para cada tipo de dado.
23/03/2006
Rodrigorpb
Ai gostaria de poder ferificar se é nulo colocar 0(zero),
Nesta parte do código:
select ( select sum(cre.valor) from lancamentocont cre where cre.data < :datainicio and cre.tipodolancamento = 1 ) - ( select sum(deb.valor) from lancamentocont deb where deb.data < :datainicio and deb.tipodolancamento = 2 ) as saldoanterior,
se se algum for nulo ele naum retorna para o saldoanterior.
como posso arrumar isto?
Codigo completo:
CREATE PROCEDURE SPREL_SALDO ( DATAINICIO DATE, DATAFIM DATE, CONTA INTEGER, TIPO CHAR(1)) RETURNS ( SALDOANTERIOR NUMERIC(15,2), CREDITOS NUMERIC(15,2), DEBITOS NUMERIC(15,2), SALDOATUAL NUMERIC(15,2)) AS begin if (:TIPO=´T´ ) then /*TODOS*/ begin select ( select sum(cre.valor) from lancamentocont cre where cre.data < :datainicio and cre.tipodolancamento = 1 ) - ( select sum(deb.valor) from lancamentocont deb where deb.data < :datainicio and deb.tipodolancamento = 2 ) as saldoanterior, ( select sum(cre.valor) from lancamentocont cre where cre.data >= :datainicio and cre.data <= :datafim and cre.tipodolancamento = 1 ) as creditos, ( select sum(deb.valor) from lancamentocont deb where deb.data >= :datainicio and deb.data <= :datafim and deb.tipodolancamento = 2 ) as debitos from lancamentocont lan where lan.data >= :datainicio and lan.data <= :datafim group by 1, 2, 3 into:saldoanterior, :creditos, :debitos; if (saldoanterior is null) then saldoanterior = 0; if (creditos is null) then creditos = 0; if (debitos is null) then debitos = 0; saldoatual = (saldoanterior + creditos - debitos); if (saldoatual is null) then saldoatual = 0; end else if (:TIPO=´S´ ) then /*SELECIONADO POR CONTA*/ begin select ( select sum(cre.valor) from lancamentocont cre where cre.data < :datainicio and cre.tipodolancamento = 1 and cre.contapatrimonial = :conta )- ( select sum(deb.valor) from lancamentocont deb where deb.data < :datainicio and deb.tipodolancamento = 2 and deb.contapatrimonial = :conta ) as saldoanterior, ( select sum(cre.valor) from lancamentocont cre where cre.data >= :datainicio and cre.data <= :datafim and cre.tipodolancamento = 1 and cre.contapatrimonial = :conta ) as creditos, ( select sum(deb.valor) from lancamentocont deb where deb.data >= :datainicio and deb.data <= :datafim and deb.tipodolancamento = 2 and deb.contapatrimonial = :conta ) as debitos from lancamentocont lan where lan.data >= :datainicio and lan.data <= :datafim and lan.contapatrimonial = :conta group by 1, 2, 3 into:saldoanterior, :creditos, :debitos; if (saldoanterior is null) then saldoanterior = 0; if (creditos is null) then creditos = 0; if (debitos is null) then debitos = 0; saldoatual = (saldoanterior + creditos - debitos); if (saldoatual is null) then saldoatual = 0; end suspend; end
23/03/2006
Rodrigorpb
era apenas usar o comando coalesce:
select coalesce(sum(cre.valor), 0) from lancamentocont cre where cre.data < :datainicio and cre.tipodolancamento = 1
Obrigado a todos e ao emerson.en.
Valeu.
23/03/2006
Emerson Nascimento
Você deve instalar a fbudf para utilizar as funções de tratamento de Nulls no firebird. Note que ele possui uma função específica para cada tipo de dado.[/quote:901bcfc4e6]
AZ, a partir do Firebird 1.5 foi implementada a função COALESCE() para esse tipo de situacão. Ela funciona de forma semelhante à função IsNull() do SQL Server.
exemplo de sintaxe da função COALESCE():
select nome, COALESCE(telcomercial, telresidencial, telcelular, ´SEM TELEFONE´) from cliente
23/03/2006
Aroldo Zanela
Valeu, eu já tinha visto outro tópico seu sobre isto e havia me esquecido.
Obrigado.
Clique aqui para fazer login e interagir na Comunidade :)