Ver Mensaje Individual
  #5 (permalink)  
Antiguo 24/05/2015, 21:00
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: consulta SQL con clausula que incluye SUM()

Es raro que no lo encontrarás, porque el foro de Bases de Datos General Está bien a la vista, en la página principal...
Supongo que sabes que SQL es el lenguaje de consulta que se usa en BB.DD. , ¿no?

En cualquier caso el error es elemental...

Código MySQL:
Ver original
  1.     ped.Cod,
  2.     mun.Nombre AS Destino,
  3.     SUM(det.Peso_Kg_U * det.Unidades) AS Peso_Kg,
  4.     est.Descripcion AS Estado
  5. FROM pedido ped
  6.     INNER JOIN control_ped con ON con.Cod_Cod_Ped = ped.Cod
  7.     INNER JOIN estado_ped est ON est.Cod = con.Estado_Cod_Est
  8.     INNER JOIN detalle_ped det ON det.Pedido_Cod_Pedido = ped.Cod
  9.     INNER JOIN sucursal suc ON suc.Cod = ped.Destino_Cod_Suc
  10.     INNER JOIN ShR shr ON shr.Estacion_Cod_Suc = suc.Cod
  11.     INNER JOIN municipio mun ON mun.Cod = suc.Ciudad
  12. WHERE est.Descripcion LIKE 'Cancelado'
  13.     AND shr.Ruta_Cod_Rut='$codRut'
  14.     # ------------------------------------------------------------------
  15.     # ESTO ESTA MAL, MUY MAL
  16.     # ------------------------------------------------------------------
  17.     AND SUM(det.Peso_Kg_U * det.Unidades) <= '$capDisp'
  18.     # ------------------------------------------------------------------
  19. GROUP BY ped.Cod

Esa línea está espantosamente mal...

Está completamente prohibido, en todos los DBMS, usar funciones agrupadas como SUM() en el WHERE.
¿Queda claro?
NO puedas usar un SUM(), AVG(), MAX(), MIN(), etc. en el WHERE. NUNCA.

SI necesitas que se evalúe un valor que resultará de la función agregada, se usa el HAVING:

Código MySQL:
Ver original
  1.     ped.Cod,
  2.     mun.Nombre Destino,
  3.     SUM(det.Peso_Kg_U * det.Unidades) Peso_Kg,
  4.     est.Descripcion Estado
  5. FROM pedido ped
  6.     INNER JOIN control_ped con ON con.Cod_Cod_Ped = ped.Cod
  7.     INNER JOIN estado_ped est ON est.Cod = con.Estado_Cod_Est
  8.     INNER JOIN detalle_ped det ON det.Pedido_Cod_Pedido = ped.Cod
  9.     INNER JOIN sucursal suc ON suc.Cod = ped.Destino_Cod_Suc
  10.     INNER JOIN ShR shr ON shr.Estacion_Cod_Suc = suc.Cod
  11.     INNER JOIN municipio mun ON mun.Cod = suc.Ciudad
  12. WHERE est.Descripcion LIKE 'Cancelado'
  13.     AND shr.Ruta_Cod_Rut='$codRut'
  14. GROUP BY ped.Cod
  15. HAVING SUM(det.Peso_Kg_U * det.Unidades) <= '$capDisp'
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 24/05/2015 a las 21:56