Select - Retornando 0
olá pessoal,
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.
Obrigdo a todos,
Rodrigo.
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
Curtidas 0
Respostas
Aroldo Zanela
23/03/2006
Colega,
Cada banco implementa isso de forma parecida, ou seja, uma função específica. Qual SGBDR que você está utilizando?
Cada banco implementa isso de forma parecida, ou seja, uma função específica. Qual SGBDR que você está utilizando?
GOSTEI 0
Rodrigorpb
23/03/2006
Desculpe havia esquecido,
É Firebird 1.5.2
É Firebird 1.5.2
GOSTEI 0
Arc
23/03/2006
Não sei se no firebird funciona assim, mas no sql server eu uso o isnull
select sum(isnull(cre.valor,0))
from lancamentocont cre
where cre.data < :datainicio
and cre.tipodolancamento = 1
select sum(isnull(cre.valor,0))
from lancamentocont cre
where cre.data < :datainicio
and cre.tipodolancamento = 1
GOSTEI 0
Rodrigorpb
23/03/2006
arc obrigado pela ajuda mas não deu certo.
Seria isto mesmo que eu quero, que quando for null ele recebece 0(zero).
Rodrigo.
Seria isto mesmo que eu quero, que quando for null ele recebece 0(zero).
Rodrigo.
GOSTEI 0
Aroldo Zanela
23/03/2006
Colega,
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.
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.
GOSTEI 0
Rodrigorpb
23/03/2006
Na verdade estou tentando fazer um calculo em uma Store Procedure e se algum campo for nulo (Receita ou Despesa) ele naum retorna nada.
Ai gostaria de poder ferificar se é nulo colocar 0(zero),
Nesta parte do código:
se se algum for nulo ele naum retorna para o saldoanterior.
como posso arrumar isto?
Codigo completo:
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
GOSTEI 0
Rodrigorpb
23/03/2006
Obrigado peesoal, o emerson.en resolvel para mim.
era apenas usar o comando coalesce:
Obrigado a todos e ao emerson.en.
Valeu.
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.
GOSTEI 0
Emerson Nascimento
23/03/2006
[quote:901bcfc4e6=´Aroldo Zanela´]Colega,
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():
na instrução acima será retornado o primeiro valor não-nulo.
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
GOSTEI 0
Aroldo Zanela
23/03/2006
Emerson.EN,
Valeu, eu já tinha visto outro tópico seu sobre isto e havia me esquecido.
Obrigado.
Valeu, eu já tinha visto outro tópico seu sobre isto e havia me esquecido.
Obrigado.
GOSTEI 0