:) vou tentar explicar melhor:veja...eu tenho um parâmetro que eu informo ao
executar a função(no caso é o vt_d_lote)se eu informar o lote então a soma e
feita com o lote que eu informar,caso eu informe "null" no parâmetro então a
soma é feita com os lotes nullos.From: [EMAIL PROTECTED]: [EMAIL PROTECTED]:
Wed, 21 Feb 2007 15:31:55 -0300Subject: Re: [PostgreSQL-Brasil] dúvida com
"null"
Bem nesse caso,
você pretende filtrar os lotes quando a variável não for
nula
OU filtrar tudo se a
variável for nula. ok?
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 ( (vt_d_lote is
not null and ie.d_lote =
vt_d_lote) or (vt_d_lote is
null) )
--
----- Original Message -----
From: saulo Mendes
To: Grupo de Usuários do PostgreSQL no
Brasil
Sent: Wednesday, February 21, 2007 2:08 PM
Subject: Re: [PostgreSQL-Brasil] dúvida com
"null"
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
Experimente!
_______________________________________________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
_________________________________________________________________
Obtenha o novo Windows Live Messenger!
http://get.live.com/messenger/overview_______________________________________________
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