
Error en consulta sql, devuelve cantidades multiplicadas
Publicado por Jose (4 intervenciones) el 23/07/2013 10:33:55
Buenos días, estoy tratando de generar una consulta que me diga las ventas de varios articulos a lo largo de un periodo de tiempo, para poder realizar pedidos, más o menos automáticos. El problema que me encuentro es:
1.- Si el articulo tiene varios códigos EAN distintos, y puede haber sido vendido con cualquiera de ellos. ( existe una relación articulos - eans del tipo uno-muchos).
El problema:
Cuando realizo esta consulta :
SELECT sum(hod9) as unid,hod13 as iva,
A0 as Codigo,A1 as Descripcion,A2 as Pvp,AA1 as Pvc,A4 as Stock,A13 as FCompra,A12 as FVta
FROM (((artitien0000 left join eans on a0=ean1) left join hisopdd0000 on (hod7=a0 or hod7=ean0 or hod7=ean1)) left join artialmacen on a0=aa0) where
(((hod1>"2012-07-10" and hod1<"2012-07-13") or hod1="2012-07-10" or hod1="2012-07-13") or
((hod1>"2013-07-06" and hod1<"2013-07-13") or hod1="2013-07-06" or hod1="2013-07-13"))
and hod4<>"E" and hod4<>"C" and hod0<>"X" and a20="99" group by A1 order by A1
Me devuelve una suma incorrecta, me explico.
Un articulo A, tiene los códigos 1 y 2, si he vendido 2 unidades con el código 1 y 3 unidades con el código 2, la consulta devuelve que he vendido 10 unidades, que es la suma total de las unidades vendidas de ese articulo, multiplicado por el número de códigos que tiene el mismo.
La consulta se compone de 4 tablas por los siguientes motivos:
1 tabla contiene los datos que necesito de la consulta
2 otra tabla contiene los distintos codigos de que dispone un articulo (para poder comprobar cuales de ellos se han vendido, ya que las descripciónes de los EAN no tienen porque coincidir con las principales).
3 otra tabla contiene el campo de referencia que indica sobre QUE articulos hay que realizar la consulta (ya que solo interesa obtener los articulos cuyo fabricante/proveedor es X)
4 y en la última tabla es donde se encuentran las ventas (para poder realizar el pedido sobre Ventas).
La verdad es que no hago más que darle vueltas, y aunque veo por donde está el problema, la verdad es que no tengo ni idea de como solucionarlo.
De antemano, agradecer vuestro tiempo y vuestra ayuda.
muchas gracias y un saludo.
1.- Si el articulo tiene varios códigos EAN distintos, y puede haber sido vendido con cualquiera de ellos. ( existe una relación articulos - eans del tipo uno-muchos).
El problema:
Cuando realizo esta consulta :
SELECT sum(hod9) as unid,hod13 as iva,
A0 as Codigo,A1 as Descripcion,A2 as Pvp,AA1 as Pvc,A4 as Stock,A13 as FCompra,A12 as FVta
FROM (((artitien0000 left join eans on a0=ean1) left join hisopdd0000 on (hod7=a0 or hod7=ean0 or hod7=ean1)) left join artialmacen on a0=aa0) where
(((hod1>"2012-07-10" and hod1<"2012-07-13") or hod1="2012-07-10" or hod1="2012-07-13") or
((hod1>"2013-07-06" and hod1<"2013-07-13") or hod1="2013-07-06" or hod1="2013-07-13"))
and hod4<>"E" and hod4<>"C" and hod0<>"X" and a20="99" group by A1 order by A1
Me devuelve una suma incorrecta, me explico.
Un articulo A, tiene los códigos 1 y 2, si he vendido 2 unidades con el código 1 y 3 unidades con el código 2, la consulta devuelve que he vendido 10 unidades, que es la suma total de las unidades vendidas de ese articulo, multiplicado por el número de códigos que tiene el mismo.
La consulta se compone de 4 tablas por los siguientes motivos:
1 tabla contiene los datos que necesito de la consulta
2 otra tabla contiene los distintos codigos de que dispone un articulo (para poder comprobar cuales de ellos se han vendido, ya que las descripciónes de los EAN no tienen porque coincidir con las principales).
3 otra tabla contiene el campo de referencia que indica sobre QUE articulos hay que realizar la consulta (ya que solo interesa obtener los articulos cuyo fabricante/proveedor es X)
4 y en la última tabla es donde se encuentran las ventas (para poder realizar el pedido sobre Ventas).
La verdad es que no hago más que darle vueltas, y aunque veo por donde está el problema, la verdad es que no tengo ni idea de como solucionarlo.
De antemano, agradecer vuestro tiempo y vuestra ayuda.
muchas gracias y un saludo.
Valora esta pregunta


0