Dudas sobre el uso de funciones sobre una base de datos en Microsoft Access

Buenos Dias Angeles,
Primero que nada te quiero agradecer por la respuesta, la verdad que me sirvió muchísimo:
SELECT Detalle_Compras.Id_Insumo, Detalle_Compras.Costo, Compras.Fecha, Proveedores.Id_Proveedor, Detalle_Compras.Id_Compra
FROM ((Detalle_Compras INNER JOIN Consulta2 ON (Detalle_Compras.Costo = Consulta2.MínDeCosto) AND (Detalle_Compras.Id_Insumo = Consulta2.Id_Insumo)) INNER JOIN Compras ON Detalle_Compras.Id_Compra = Compras.Id_Compra) INNER JOIN Proveedores ON Compras.Id_Proveedor = Proveedores.Id_Proveedor;
El único problema que me quedo es que al probar la consulta me di cuenta que si un insumo se lo compre al mismo precio a dos proveedores distintos, me muestra los dos proveedores y me gustaría que me mostrara solo uno, ¿se puede solucionar este problema? Te cuento la razón de por que quiero que aparezca uno, porque de esa consulta yo armo un informe en el cual me muestra un listado de compras de insumos que yo armo en otro formulario y al final figura un total, entonces si un insumo se lo compre a dos proveedores al mismo precio, en ese listado figura repetido dos veces porque el dato lo trae de la consulta y el total del listado queda distorsionado.
No se si habrá alguna manera de poner en el informe de que muestre solo una vez ese insumo, que me ponga uno de los proveedores, no los dos, para que en el total no me aparezca sumado dos veces el mismo insumo.
Saludos cordiales,
Gustavo

1 Respuesta

Respuesta
1
Lo que heremos es agrupar por Insumo y Costo, eligiendo el 1º de Proveedor, 1º de fecha y 1º de Id_Compra:
SELECT Detalle_Compras.Id_Insumo, Detalle_Compras.Costo, First(Compras.Fecha) AS PrimeroDeFecha, First(Proveedores.Id_Proveedor) AS PrimeroDeId_Proveedor, First(Detalle_Compras.Id_Compra) AS PrimeroDeId_Compra
FROM ((Detalle_Compras INNER JOIN Consulta2 ON (Detalle_Compras.Costo = Consulta2.MínDeCosto) AND (Detalle_Compras.Id_Insumo = Consulta2.Id_Insumo)) INNER JOIN Compras ON Detalle_Compras.Id_Compra = Compras.Id_Compra) INNER JOIN Proveedores ON Compras.Id_Proveedor = Proveedores.Id_Proveedor
GROUP BY Detalle_Compras.Id_Insumo, Detalle_Compras.Costo;
Buenos días Angeles,
Anduvo muy bien la consulta que me mandaste. Lo que no pude agregarle a la consulta es un rango de fechas. Me explico: le agregue el siguiente criterio a la consulta en el campo fecha: Entre [Fecha Inicial DD/MM/AAAA] Y [Fecha Final DD/MM/AAAA], para poder filtrar por fechas, porque debido a la inflación los precios de los productos varían bastante, entonces lo que quiero es que la consulta me muestre el menor costo de los insumos pero por un rango de fechas, y de la manera que yo lo hice cuando ejecuto la consulta y pongo un rango de fecha superior al del menor costo del insumo, no me lo trae. Por ejemplo: yo compre un insumo X el 20/06/2010 a $5, y lo volvi a comprar el 22/07/2010 a $7, y el 25/07/2010 a $8. Si yo le coloco en el rango de fechas entre el 01/07/2010 y el 30/07/2010, ese insumo POR que compre no me lo trae, ya que toma como menor costo los $5 y a ese valor fue comprado el 20/06/2010. Lo que me gustaría que me traiga es el valor de la compra del 22/07/2010 que es $7.
Espero haber podido explicarme, y te pido disculpas por las molestias, pero realmente si me podrías ayudar con esto ultimo te agradecería mucha y la consulta me quedaría terminada con un 10!
Saludos Cordiales,
Gustavo
La selección de fechas lo debes hacer en Consulta2, ya que es esta la que manda el mínimo. La sql sería: (Te lo he puesto con parámetros para que cuando abras la consulta definitiva te pida la fecha inicial y la fecha final)
PARAMETERS [Fecha Inicial] DateTime, [Fecha Final] DateTime;
SELECT Detalle_Compras.Id_Insumo, Min(Detalle_Compras.Costo) AS MínDeCosto
FROM Detalle_Compras INNER JOIN Compras ON Detalle_Compras.Id_Compra = Compras.Id_Compra
WHERE (((Compras.Fecha) Between [Fecha Inicial] And [Fecha Final]))
GROUP BY Detalle_Compras.Id_Insumo;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas