Consulta de mínimo - problema de ordenamiento

Buenas expertos, les comento: tengo una tabla que almacena los productos y los precios del proveedor (prodprecio) con la siguiente estructura:
IDProdPrecio(campclave*), IDCotejo, IDProd, Producto, Precio, Cant, Marca,  Proveedor
Con esta tabla obtengo el producto con menor precio, el proveedor que lo oferta y la marca a través de la siguiente consulta:
SELECT IDCotejo, IDProd, Producto, Min(Precio) AS MínDeprecio, First(CotProdCons.cant) AS PrimeroDecant, First(Marca) AS PrimeroDemarca, First(CotProdCons.Proveedor) AS PrimeroDeproveedor
FROM prodprecio
GROUP BY IDCotejo, IDProd, Producto
ORDER BY First(Producto);
Con lo cual perfectamente trae el producto de menor precio, la marca y el proveedor.
Ahora bien, si modifico un precio en la tabla de manera que un proveedor, que había quedado en 2º o 3º lugar (o posterior) gane el menor precio, sucede que la consulta arroja bien el precio mínimo pero sigue apareciendo el nombre del proveedor y la marca del anterior ganador (que ya no lo seria).
Pongo un ejemplo, dada la tabla con estos datos:
IDCotejo - IDProd - Prod - Precio - Marca - Cant - Proveedor
---------------------------------------------------------------------------
(1) 50 200 XX1 2.5 M11 2 P1
(2) 50 200 XX1 2.2 M22 2 P2
(3) 50 205 XX2 5.5 M33 8 P1
(4) 50 205 XX2 5.75 M44 8 P2
En este caso el resultado de la consulta seria:
50 - 200 - XX1 - 2.2 - M22 - 2 - P2
50 - 205 - XX2 - 5.5 - M33 - 8 - P1
Correcto. Pero supongamos que modificamos el precio de la linea (1) a 2.15, entonces cuando ejecuto la consulta me aparece así:
50 - 200 - XX1 - 2.15 - M22 - 2 - P2 (!)
50 - 205 - XX3 - 5.5 - M33 - 8 - P1
(!) Nótese que el precio mínimo es correcto, pero no así la marca ni el proveedor (tendría que mostrar M11 y P1)
¿Alguna idea por qué ocurre esto?. Gracias.

1 Respuesta

Respuesta
1
Esto pasa porque para un Cotejo, Producto (Por los que agrupas) estas seleccionando el mínimo de precio y el Primero de Proveedor.
Yo haría primero una consulta para calcular por código el menor coste:
SELECT Producto, Min(Precio) AS MínDeCosto
FROM ProdPrecio
GROUP BY Producto;
Supongamos que a esta consulta la llamamos Consulta2
Después, haría otra consulta para vincular el Producto y el MíndeCosto:
SELECT ProdPrecio.Codigo, ProdPrecio.Precio
FROM ProdPrecio INNER JOIN Consulta2 ON ProdPrecio.Precio= Consulta2.MínDeCosto AND ProdPrecio.Producto= Consulta2.Producto;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas