SQL - Error en consulta sql, devuelve cantidades multiplicadas

   
Vista:

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error en consulta sql, devuelve cantidades multiplicadas

Publicado por Jose (4 intervenciones) el 24/07/2013 20:03:03
Perdonad, sin saber lo que son cada campo, igual es dificil.

Una pequeña anotación sobre la estructura.

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

Tabla "artitien0000"
A0=Codigo
A1=Descripción
A2=Pvp
A4=Stock
A13=Fecha Compra
A12=Fecha Venta
A20=Fabricante

Tabla "Artialmacen" (Esta es la más importante)
AA0=Codigo
AA1=Coste

Tabla "Eans"
Ean0=Codigo EAN (Puede haber muchos para un mismo articulo, en función del pais de procedencia)
Ean1=Codigo (Codigo principal del articulo, que lo relaciona con las tablas Artialmacen y Artitien)
Ean2=Descripción del Ean (No tiene porque coincidir con la descripción del articulo principal)
Ean3=Precio del EAN (Puede ser diferente, por algún acto puntual)

Tabla "Hisopdd0000" (Historico de Ventas)
Hod0=Tipo de Venta (Si es ticket, albaran, Facturación de Albaranes, etc)
Hod1=Fecha de la Venta
Hod4=Tipo de Venta (Si es ticket, albaran, Facturación de Albaranes, etc) Al igual que Hod0, pero tiene otra función interna.
Hod7=Código por el que se ha vendido el articulo (Puede haber sido, por EAN, si ha sido leido con lector, o puede ser el código principal, si se ha buscado el articulo a mano por descripción), no se si es un error de diseño de la aplicación o está bien hecho, pero el hecho es que funciona así.
Hod8=Descripción de la venta (Puede alterarse la descricpción del articulo en la misma venta)
Hod9=Unidades Vendidas
Hod10=Precio de Venta
Hod13=Iva

De nuevo, no me queda más que agradecer vuestra ayuda y colaboración.

Pd.- Estoy dandole vueltas a realizar la consulta a través de selects anidados, pero no lo acabo de ver.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en consulta sql, devuelve cantidades multiplicadas

Publicado por walter (1 intervención) el 24/07/2013 22:51:08
hola amigos me pueden ayudar con mi proyecto..... Mi pregunta es lo siguiente como puedo hacer una tabla con una celda que contenga imagen.., por ejemplo cuando yo quiero escribir una contraseña quiero que aparesca una imagen........ estoy haciendo en php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar