Esse é o meu grande problema: esse select não deve somar os lotes nulos e 
não-nulos. Na verdade essa é uma função onde eu informo o produto(in_c_produto) 
o estoque (in_c_estoque) e o lote(vt_d_lote).Esse comando deve realizar essa 
operação conforme o lote informado(se é nulo ou não). O que eu queria fazer 
era, justamente, evitar reescrever o sql apenas por causa do 
lote.entendeu?From: [EMAIL PROTECTED]: [EMAIL PROTECTED]: Wed, 21 Feb 2007 
14:47:17 -0300Subject: Re: [PostgreSQL-Brasil] dúvida com "null"








    Olá Saulo... Acho que pode ser isso 
aqui então:
 
select sum(tabela.valortotal) as TOTAL_GELALfrom 
(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 é 
  issoveja... o campo d_lote pode ser vazio ou não...mas ambos 
  trazem resultados diferentesno 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]: 
    [EMAIL PROTECTED]: Wed, 21 Feb 2007 14:17:27 
    -0300Subject: 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 
      nuloa 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 BrasilAntes de perguntar consulte o 
      manualhttp://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 BrasilAntes de perguntar consulte o 
  manualhttp://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

_________________________________________________________________
Descubra e experimente alguns novos serviços online no Windows Live Ideas
http://ideas.live.com
_______________________________________________
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