Select - Retornando 0

23/03/2006

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.
 select sum(cre.valor)
                 from lancamentocont cre
                 where cre.data < :datainicio
                   and cre.tipodolancamento = 1


Obrigdo a todos,


Rodrigo.


Rodrigorpb

Rodrigorpb

Responder

Posts

23/03/2006

Aroldo Zanela

Colega,

Cada banco implementa isso de forma parecida, ou seja, uma função específica. Qual SGBDR que você está utilizando?


Responder

23/03/2006

Rodrigorpb

Desculpe havia esquecido,

É Firebird 1.5.2


Responder

23/03/2006

Arc

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


Responder

23/03/2006

Rodrigorpb

arc obrigado pela ajuda mas não deu certo.

Seria isto mesmo que eu quero, que quando for null ele recebece 0(zero).


Rodrigo.


Responder

23/03/2006

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.


Responder

23/03/2006

Rodrigorpb

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:
        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



Responder

23/03/2006

Rodrigorpb

Obrigado peesoal, o emerson.en resolvel para mim.

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.


Responder

23/03/2006

Emerson Nascimento

[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():
select 
  nome,
  COALESCE(telcomercial, telresidencial, telcelular, ´SEM TELEFONE´)
from
  cliente
na instrução acima será retornado o primeiro valor não-nulo.


Responder

23/03/2006

Aroldo Zanela

Emerson.EN,

Valeu, eu já tinha visto outro tópico seu sobre isto e havia me esquecido.
Obrigado.


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar