Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/06/2013, 11:39
luis_enr27
Invitado
 
Mensajes: n/a
Puntos:
Busqueda Problema: INNER JOIN con tres tablas y función SUM

Hola Buen día tengo un serio problema con sum y los inner join en SQL... Espero puedan ayudarme
Bueno quiero hacer una consulta a 3 tablas y poder obtener la suma del campo ventas_TM y suma de ventas_TM de la tabla de ventas, a su vez la suma de gasto de la tabla gastos y tambien la suma de depositos de la tabla depositos; Todo esto que cumpla la condicion que pido en donde el rango de fechas seleccionado, de la farmacia seleccionada y del turno donde sea diferente a completo.

TABLAS:
ventas (id_venta,fecha,farmacia, usuario_TM, ventas_TM,usuario_TB,ventas_TV)
gastos (id_gasto,fecha,farmacia,usuario,turno,gasto)
depositos (id_deposto, fecha,farmacia,usuario,turno,deposito)

CONSULTA:
SELECT
ventas.fecha,
usuario_TM,
SUM( DISTINCT ventas_TM) as TM,
usuario_TV,
SUM(DISTINCT ventas_TV) as TV,
SUM(DISTINCT (ventas_TM+ventas_TV)) as TOTAL_VENTAS,
CASE WHEN COUNT(gasto)>1 THEN ifnull((SUM(gasto)/count(DISTINCT
id_deposito)), (SUM(gasto)/1))
ELSE ifnull(SUM(DISTINCT gasto),0)
END,
CASE WHEN COUNT(deposito)>1 THEN ifnull((SUM(deposito)/count(distinct id_gasto)), (SUM(deposito)/1))
ELSE ifnull(SUM(DISTINCT deposito),0)
END
FROM ventas INNER JOIN gastos INNER JOIN depositos
ON ventas.fecha=gastos.fecha AND gastos.fecha=depositos.fecha
WHERE ventas.farmacia='nombre_farmacia' AND ventas.fecha between '2013-06-01' AND '2013-06-15' AND
gastos.turno!='COMPLETO' AND depositos.turno!='COMPLETO'
GROUP BY ventas.fecha
ORDER BY ventas.fecha ASC;

El problema es que utilizo un while para la obtencion de informacion y llenado de un reporte pero me devuelve informacion erronea cuando hago una consulta, ya que me multiplica la informacion(sumas) por el numero de registros de la tabla de union es por ello qe hago case, pero aun asi cuando no hay un registro en la otra tabla que cumpla la condicion no regresa ningun dato.
relaciono las tablas por fecha y por farmacia ya que con el id no puedo, ya que hay ocacionesque alguna de las tres tablas puede tener de 0 a muchos registros. espero entiendan