Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/07/2013, 18:32
Avatar de ALUadicted
ALUadicted
 
Fecha de Ingreso: julio-2013
Ubicación: Moterrey
Mensajes: 3
Antigüedad: 11 años, 4 meses
Puntos: 0
Pregunta Inner Join, Sum y Union

Necesito ayuda, Tengo una semana completa tratando de hacr una consulta en Mysql uniedo 3 tablas atravez de inner Join y aunque he descubierto varias formas de composicion ya me doi por fastidiado y estresado.

Explico Tengo la Tabla Ventas, Gastos y Depositos las cuales relaciono mediante el campo fecha, nombre de farmacia, ya que no puedo relacionarlos mediante su id ya que las tablas pueden tener N registros relacionados.

Haho la sig consulta, utilizando tambien la fx Sum para sumar los campos de gastos y depositos pertenecientes a las ventas de la farmacia y con un rengo de fechas. que cumplan con la condicion.
Código MySQL:
Ver original
  1.      ventas.fecha,
  2.        usuario_TM,
  3.        ventas_TM,
  4.        usuario_TV,
  5.            ventas_TV,
  6.           /*Utilizo los case ya que el valor puede ser nulo, tambien por que cada  
  7.                 registro se me multiplica por el numero de registros de la tabla a a  
  8.                   unir*/
  9.        CASE WHEN COUNT(gasto)>1  THEN ifnull((SUM(gasto)/count(distinct    
  10.                   id_deposito)), (SUM(gasto)/1))
  11.             ELSE ifnull(SUM(DISTINCT gasto),0)
  12.             END,
  13.        CASE WHEN COUNT(deposito)>1  THEN ifnull((SUM(deposito)/count(distinct
  14.                 gasto)), (SUM(deposito)/1))
  15.           ELSE ifnull(SUM(DISTINCT deposito),0)
  16.             END
  17.  
  18.     FROM  ventas INNER JOIN gastos INNER JOIN depositos
  19.       ON ventas.fecha=gastos.fecha AND gastos.fecha=depositos.fecha
  20.       WHERE ventas.farmacia=EJEMPLO' AND ventas.fecha
  21.                                           between '2013-06-25' AND '2013-06-27'
  22.         AND gastos.farmacia=' EJEMPLO' AND gastos.fecha
  23.                                           between '2013-06-25' AND '2013-06-27'
  24.             AND depositos.farmacia=' EJEMPLO' AND depositos.fecha
  25.                                           between '2013-06-25' AND '2013-06-27'
  26.  GROUP BY ventas.fecha
  27.     ORDER BY ventas.fecha ASC;


Es una consulta algo larga, me funciona bien pero sola mente cuando hay 1 registro de cada tabla que cumple la condicion, si ingreso mas registros por ejemplo de gastos de ese dia y de esa farmacia se me altera o multiplica la suma de depositos. y no se por que??? tambien si no hay registros de la tabla por qjemplo depositos no me arroja nigun resultado de ventas y gastos ya que esta si contienen informacion... Alguien que me de una idea

Última edición por gnzsoloyo; 02/07/2013 a las 03:56