Olá Rafael... agradeço a sua colaboração e entedi o que vc falou abaixo com uma 
ressalva :
No meu caso eu já estou passando o produto como parâmetro, LOGO vai ser 
retornado
todos os fornecedores da COTAÇÃO 9616 do PRODUTO 26532. Passando o rownum = 1 
sempre
vai retornar o produto que eu quero de menor valor, porém quero que me retorne 
a linha toda, ou seja, PRODUTO, FORNECEDOR E PREÇO.
 
Para o seu select retornar corretamente o produto tive que acrescentar mais uma 
linha na cláusula where repetindo o produto pois ele estava retornando produtos 
de outras cotações que tenha o mesmo preço.
 
select Pro_In_Codigo Produto,
Agn_In_Codigo Fornecedor,
Cof_Re_Vlcustu "Melhor Oferta de Custo"
from mgadm.Est_Itenscotpreco
where Cof_Re_Vlcustu = 
(select min(Cof_Re_Vlcustu) from mgadm.Est_Itenscotpreco
where Cot_In_Codigo = 9616
and Org_Tab_In_Codigo = 53
and Org_Pad_In_Codigo = 1
and Org_In_Codigo = 8
and Org_Tau_St_Codigo = 'G'
and Pro_Tab_In_Codigo = 100
and Pro_Pad_In_Codigo = 1
and Pro_In_Codigo = 26532
and Cof_Re_Vlcustu > 0)
and Pro_in_codigo = 26532
 
Além disso, como não existe índice indexado pelo valor, o seu select faz um 
access full na tabela com um custo muito elevado. 
A dúvida é se existe alguma maneira de retornar essa linha utilizando um único 
select. Talvez utilizando o comando over. Já ví algo parecido utilizando este 
comando mas não consegui implementar.
 
Att. Abel de Souza Magalhães
___________________________________
Depto. Informática 
Ober S/A Indústria e Comércio
[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> 
http://www.ober.com.br <http://www.ober.com.br/> 
(19) 3466-9200 R. 9391
________________________________

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Rafael 
Milanez - BusinessOn
Enviada em: quinta-feira, 7 de dezembro de 2006 09:12
Para: oracle_br@yahoogrupos.com.br
Assunto: Re: [oracle_br] Mínimo valor usando sub-select



Abel este seu select talvez não seja a melhor maneira , pois se vc tiver mais 
de um produto com o menor valor , o ROWNUM =1 
trara apenas uma linha

Ve se funciona este select e se o tempo de performance é vantajoso

set timing on
select b.Pro_In_Codigo Produto,
b.Agn_In_Codigo Fornecedor,
b.Cof_Re_Vlcustu "Melhor Oferta de Custo"
from mgadm.Est_Itenscotpreco b
where b.Cof_Re_Vlcustu = (select min(Cof_Re_Vlcustu) from 
mgadm.Est_Itenscotpreco)

and b.Cot_In_Codigo = 9616
and b.Org_Tab_In_Codigo = 53
and b.Org_Pad_In_Codigo = 1
and b.Org_In_Codigo = 8
and b.Org_Tau_St_Codigo = 'G'
and b.Pro_Tab_In_Codigo = 100
and b.Pro_Pad_In_Codigo = 1
and b.Pro_In_Codigo = 26532
and b.Cof_Re_Vlcustu > 0

set timing off

Abs

----- Original Message ----- 
From: Abel - Informatica 
To: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>  
Sent: Thursday, December 07, 2006 8:15 AM
Subject: [oracle_br] Mínimo valor usando sub-select

select b.Pro_In_Codigo Produto,
b.Agn_In_Codigo Fornecedor,
b.Cof_Re_Vlcustu "Melhor Oferta de Custo"
from mgadm.Est_Itenscotpreco b
where b.Cot_In_Codigo = 9616
and b.Org_Tab_In_Codigo = 53
and b.Org_Pad_In_Codigo = 1
and b.Org_In_Codigo = 8
and b.Org_Tau_St_Codigo = 'G'
and b.Pro_Tab_In_Codigo = 100
and b.Pro_Pad_In_Codigo = 1
and b.Pro_In_Codigo = 26532
and b.Cof_Re_Vlcustu > 0
group by b.Pro_In_Codigo, b.Agn_In_Codigo, Cof_Re_Vlcustu
order by 3 

Olá, estou utilizando a instrução SQL acima e após executar a mesma, ela me 
retorna a seguinte informação :

Produto Fornecedor Melhor Oferta de Custo

26532 13254 22,17959
26532 16318 22,86054
26532 19074 23,34693
26532 17096 24,31972

Preciso retornar o menor valor entre os listados acima porém preciso tbém da 
informação do Produto e do Fornecedor. Para isso, utilizei a seguinte forma :

select xx.* from ( 
select b.Pro_In_Codigo Produto,
b.Agn_In_Codigo Fornecedor ,
b.Cof_Re_Vlcustu "Melhor Oferta de Custo"
from mgadm.Est_Itenscotpreco b
where b.Cot_In_Codigo = 9616
and b.Org_Tab_In_Codigo = 53
and b.Org_Pad_In_Codigo = 1
and b.Org_In_Codigo = 8
and b.Org_Tau_St_Codigo = 'G'
and b.Pro_Tab_In_Codigo = 100
and b.Pro_Pad_In_Codigo = 1
and b.Pro_In_Codigo = 26532
and b.Cof_Re_Vlcustu > 0
group by b.Pro_In_Codigo, b.Agn_In_Codigo, Cof_Re_Vlcustu
order by 3 
) xx 
where rownum = 1 

A pergunta é : Esta é a melhor forma de se fazer isso ?
Existe outra forma de se conseguir o mesmo resultado sem utilizar o sub-select 
? 

Aguardo seus comentários. 

Att. Abel de Souza Magalhães
___________________________________
Depto. Informática 
Ober S/A Indústria e Comércio
[EMAIL PROTECTED] <mailto:abel.magalhaes%40ober.com.br>  <mailto:[EMAIL 
PROTECTED] <mailto:abel.magalhaes%40ober.com.br> > 
http://www.ober.com.br <http://www.ober.com.br>  <http://www.ober.com.br/ 
<http://www.ober.com.br/> > 
(19) 3466-9200 R. 9391

[As partes desta mensagem que não continham texto foram removidas]

[As partes desta mensagem que não continham texto foram removidas]



 


[As partes desta mensagem que não continham texto foram removidas]

Responder a