Olá Saulo... Acho que pode ser isso aqui então:

select sum(tabela.valortotal) as TOTAL_GELAL
from (select coalesce(sum(ie.qt_entrada*up.vr_fator),0) as valortotal
      from tb_itentrada_prod ie
      inner join tb_unid_produto up on (up.c_unid_produto = ie.c_unid_produto)
             and (up.d_unidade in ('E','A'))
      inner join tb_entrada_prod e on (ie.c_entrada_prod = e.c_entrada_prod)
             and (e.c_estoque = in_c_estoque)
             and (to_timestamp(e.dt_emissao||' '||e.hr_entrada, 'YYYY-MM-DD 
HH24:MI:SS') > coalesce(v_hr_inventario,'1900-02-20 11:18:14-03'))
      where (ie.c_produto = in_c_produto) and ie.d_lote is null

      union all

      select coalesce(sum(ie.qt_entrada*up.vr_fator),0) as valortotal
      from tb_itentrada_prod ie
      inner join tb_unid_produto up on (up.c_unid_produto = ie.c_unid_produto)
             and (up.d_unidade in ('E','A'))
      inner join tb_entrada_prod e on (ie.c_entrada_prod = e.c_entrada_prod)
             and (e.c_estoque = in_c_estoque)
             and (to_timestamp(e.dt_emissao||' '||e.hr_entrada, 'YYYY-MM-DD 
HH24:MI:SS') > coalesce(v_hr_inventario,'1900-02-20 11:18:14-03'))
      where (ie.c_produto = in_c_produto) and ie.d_lote = vt_d_lote
) tabela

** Descrevendo esse sql, Faço um select de todos os lotes nulos +  select de 
todos os lotes = à vt_d_lote;
    Usando a Teoria de Sub-Selects.

    Assim, conforme você descreveu pode ter a chave vazia ou não e ele somará 
as duas.

    Sidnei


  ----- Original Message ----- 
  From: saulo Mendes 
  To: Grupo de Usuários do PostgreSQL no Brasil 
  Sent: Wednesday, February 21, 2007 1:31 PM
  Subject: Re: [PostgreSQL-Brasil] dúvida com "null"



   olá Sidnei, ainda não é isso


  veja... o campo d_lote pode ser vazio ou não...mas ambos trazem resultados 
diferentes
  no caso o resultado dessa consulta (select 
coalesce(sum(ie.qt_entrada*up.vr_fator),0)....)
  varia se o campo for nulo ou não, se eu utilizar  (vt_d_lote is null or 
ie.d_lote = vt_d_lote)
  aí o resultado vai ficar incorreto. 




----------------------------------------------------------------------------
    From: [EMAIL PROTECTED]
    To: [email protected]
    Date: Wed, 21 Feb 2007 14:17:27 -0300
    Subject: Re: [PostgreSQL-Brasil] dúvida com "null"


        Além disso.......
        Acho que não compreendi a sua pergunta no primeiro momento, mas o que 
você pretende fazer pode ser assim:

    where (ie.c_produto = in_c_produto) and (vt_d_lote is null or ie.d_lote = 
vt_d_lote)

        Abraços
        Sidnei
      ----- Original Message ----- 
      From: saulo Mendes 
      To: [email protected] 
      Sent: Wednesday, February 21, 2007 1:07 PM
      Subject: [PostgreSQL-Brasil] dúvida com "null"



      Senhores,

      em uma determinada função se eu comparar um valor de uma variável, e esta 
contiver um valor nulo
      a consulta não me traz o resultado. Gostaria de saber como equacionar 
isso de forma não-redundante.

      segue o trecho da consulta:

         select coalesce(sum(ie.qt_entrada*up.vr_fator),0)
          from tb_itentrada_prod ie inner join tb_unid_produto up
           on (up.c_unid_produto = ie.c_unid_produto) and (up.d_unidade in 
('E','A'))
          inner join tb_entrada_prod e on (ie.c_entrada_prod = e.c_entrada_prod)
           and (e.c_estoque = in_c_estoque) and
          (to_timestamp(e.dt_emissao||' '||e.hr_entrada,
           'YYYY-MM-DD HH24:MI:SS') >
            coalesce(v_hr_inventario,'1900-02-20 11:18:14-03'))
          where (ie.c_produto = in_c_produto) and (ie.d_lote = vt_d_lote) <<<< 
vt_d_lote é uma variável....se o valor dela for nulo(esse campo pode ser nulo) 
a consulta não me traz o valor correto pois o postgres não entendeu tipo, 
ie.d_lote = null.
          into vr_estoque_positivo;

      a solução parcial que encontrei é, antes de consulta (select coalesce...) 
eu testar se a variável é nula, caso seja eu reescrevo a função com o final 
ie.d_lote is null. Eu gostaria de eliminar esse redundância.

      agradeço, desde já.



--------------------------------------------------------------------------
      O Windows Live Spaces está aqui! Descubra como é fácil criar seu espaço 
na Web e sua rede amigos. Confira! 

--------------------------------------------------------------------------

      _______________________________________________
      Grupo de Usuários do PostgreSQL no Brasil
      Antes de perguntar consulte o manual
      http://pgdocptbr.sourceforge.net/

      Para editar suas opções ou sair da lista acesse a página da lista em:
      http://pgfoundry.org/mailman/listinfo/brasil-usuarios


------------------------------------------------------------------------------
  Ligue para os seus amigos grátis. Faça chamadas de PC-para-PC pelo 
messenger-- GRÁTIS Experimente agora! 


------------------------------------------------------------------------------


  _______________________________________________
  Grupo de Usuários do PostgreSQL no Brasil
  Antes de perguntar consulte o manual
  http://pgdocptbr.sourceforge.net/

  Para editar suas opções ou sair da lista acesse a página da lista em:
  http://pgfoundry.org/mailman/listinfo/brasil-usuarios
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a