SQL PARA COTACAO DE PRODUTOS
Boa tarde pessoal.
Fiz varias pesquisas e não obtive exito... também de todos os jeitos que [ô]eu[ô] pude tentar, agora estou recorrendo a vocês, espero que possam me ajudar.
Seguinte, estou desenvolvendo uma aplicação pra cotações de produtos.
Nesta aplicações possuo as seguintes tabelas
COTAPRECO - Onde guardo os preços dos produtos de cada fornecedor
PRODUTOS - Cadastro do Produto
FORNECEDORES - Cadastro de Fornecedores.
Na tabela COTAPRECO tenho os seguinte campos..
CODFOR - Código do Fornecedor
CODPRO - Código do Produto
CUSTO - Preço do Produto do determinado fornecedor
DATA - Data que cadastrou
HORA - Hora que cadastrou
Quero um SQL que faça o seguinte, link os codigos de fornecedores e produtos para pegar as descrições, e separar o preço menor de cada fornecedor. Até aà consegui fazer com este código.
Porém se tiver um produto com preço igual entre mais de um fornecedor, estes produtos aparecem duplicados, e eu queria que aparecece o fornecedor que lanço o preço primeiro (data e hora menor). Seré que deu pra entender? ;P
Conto com a ajuda de vocês!
Fiz varias pesquisas e não obtive exito... também de todos os jeitos que [ô]eu[ô] pude tentar, agora estou recorrendo a vocês, espero que possam me ajudar.
Seguinte, estou desenvolvendo uma aplicação pra cotações de produtos.
Nesta aplicações possuo as seguintes tabelas
COTAPRECO - Onde guardo os preços dos produtos de cada fornecedor
PRODUTOS - Cadastro do Produto
FORNECEDORES - Cadastro de Fornecedores.
Na tabela COTAPRECO tenho os seguinte campos..
CODFOR - Código do Fornecedor
CODPRO - Código do Produto
CUSTO - Preço do Produto do determinado fornecedor
DATA - Data que cadastrou
HORA - Hora que cadastrou
Quero um SQL que faça o seguinte, link os codigos de fornecedores e produtos para pegar as descrições, e separar o preço menor de cada fornecedor. Até aà consegui fazer com este código.
select b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
from cotapreco as b
INNER JOIN produtos ON (b.codpro = produtos.lanca)
inner join fornecedores ON (b.codfor = fornecedores.lanca)
where
b.custo = (select min(a.custo) from cotapreco as a where a.codpro = b.codpro)
order by produtos.produto;
Porém se tiver um produto com preço igual entre mais de um fornecedor, estes produtos aparecem duplicados, e eu queria que aparecece o fornecedor que lanço o preço primeiro (data e hora menor). Seré que deu pra entender? ;P
Conto com a ajuda de vocês!
Tenta a consulta abaixo:
select b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
from cotapreco as b
INNER JOIN produtos ON (b.codpro = produtos.lanca)
inner join fornecedores ON (b.codfor = fornecedores.lanca)
where
b.custo = (select [txt-color=#0000f0]TOP 1[/txt-color] min(a.custo) from cotapreco as a where a.codpro = b.codpro [txt-color=#0000f0]ORDER BY DATA, HORA[/txt-color])
order by produtos.produto;
select b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
from cotapreco as b
INNER JOIN produtos ON (b.codpro = produtos.lanca)
inner join fornecedores ON (b.codfor = fornecedores.lanca)
where
b.custo = (select [txt-color=#0000f0]TOP 1[/txt-color] min(a.custo) from cotapreco as a where a.codpro = b.codpro [txt-color=#0000f0]ORDER BY DATA, HORA[/txt-color])
order by produtos.produto;
Não deu certo Fabiano!
Esqueci de mencionar mas o banco é MYSQL 5.1, fico no aguarde de alguma coisa que possa me ajudar!
Mas lhe agradeço a atenção!
Abraço!
Esqueci de mencionar mas o banco é MYSQL 5.1, fico no aguarde de alguma coisa que possa me ajudar!
Mas lhe agradeço a atenção!
Abraço!
Assim, deve funcionar:
select b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
from cotapreco as b
INNER JOIN produtos ON (b.codpro = produtos.lanca)
inner join fornecedores ON (b.codfor = fornecedores.lanca)
where
b.custo = (select min(a.custo) from cotapreco as a where a.codpro = b.codpro ORDER BY DATA, HORA limit 1)
order by produtos.produto;
select b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
from cotapreco as b
INNER JOIN produtos ON (b.codpro = produtos.lanca)
inner join fornecedores ON (b.codfor = fornecedores.lanca)
where
b.custo = (select min(a.custo) from cotapreco as a where a.codpro = b.codpro ORDER BY DATA, HORA limit 1)
order by produtos.produto;
Coloca um Group By...
select b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
from cotapreco as b
INNER JOIN produtos ON (b.codpro = produtos.lanca)
inner join fornecedores ON (b.codfor = fornecedores.lanca)
where
b.custo = (select min(a.custo) from cotapreco as a where a.codpro = b.codpro)
order by produtos.produto
Group By b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
select b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
from cotapreco as b
INNER JOIN produtos ON (b.codpro = produtos.lanca)
inner join fornecedores ON (b.codfor = fornecedores.lanca)
where
b.custo = (select min(a.custo) from cotapreco as a where a.codpro = b.codpro)
order by produtos.produto
Group By b.codfor, b.codpro, b.custo, b.data, b.hora, produtos.PRODUTO, produtos.codbarra, fornecedores.razao
Ainda não deu certo pessoal, continua aparecendo os dois fornecedores que tem o preço igual...
teria alguma outra forma?
mas agradeço a atenção..
teria alguma outra forma?
mas agradeço a atenção..
Alguém ???
Rasguei uma noite quebrando a cabeça! Mas consegui uma solução!
Segue a baixo pra quem tiver o mesmo problema posteriormente
Obrigado a todos que contribuiram!
Abraços
Segue a baixo pra quem tiver o mesmo problema posteriormente
SELECT a.CODFOR, a.CODPRO, a.CUSTO, a.LANCA, a.DATA, a.HORA, p.PRODUTO, p.CODBARRA, f.RAZAO
FROM COTAPRECO as a
INNER JOIN produtos as p ON (a.CODPRO = p.LANCA)
INNER JOIN fornecedores AS f ON (a.CODFOR = f.LANCA)
WHERE a.custo = (SELECT min(b.custo) from cotapreco as b WHERE(b.codpro = a.codpro))
GROUP BY a.codpro
having min(a.lanca);
Obrigado a todos que contribuiram!
Abraços
Tópico encerrado , respostas não são mais permitidas