SQL - mostrar solo los pedidos cuyo peso no exceda la capacidad

 
Vista:
sin imagen de perfil

mostrar solo los pedidos cuyo peso no exceda la capacidad

Publicado por metalheadb93 (2 intervenciones) el 25/05/2015 04:59:27
hola
soy nuevo en este foro

tengo un problema con una consulta SQL

soy algo novato y para mi proyecto final
estoy desarrollando una aplicación para la gestión y transporte de pedidos
y requiero ver el cierta información del pedido

os explicare rápido

un pedido está compuesto por la información del cliente y el código del pedido
también hay una tabla detalles de pedido en la que se guarda el código del pedido y el código del producto que va con el pedido
un pedido muchos detalles

los pedidos se empaquetan en una encomienda, la cual es transportada por una ruta, un camión y pasa por varias sucursales
cada encomienda tiene la información del vehículo, la ruta (la ruta tiene muchos detalles de ruta cada detalle de la ruta representa una sucursal por donde pasa) y el estado;
cada encomienda tiene detalles, cada detalle de encomienda representa un pedido que está asignado a esa encomienda




SELECT ped.Cod, mun.Nombre AS Destino, SUM(det.Peso_Kg_U * det.Unidades) AS Peso_Kg, est.Descripcion AS Estado
FROM pedido ped
INNER JOIN control_ped con ON con.Cod_Cod_Ped = ped.Cod
INNER JOIN estado_ped est ON est.Cod = con.Estado_Cod_Est
INNER JOIN detalle_ped det ON det.Pedido_Cod_Pedido = ped.Cod
INNER JOIN sucursal suc ON suc.Cod = ped.Destino_Cod_Suc
INNER JOIN ShR shr ON shr.Estacion_Cod_Suc = suc.Cod
INNER JOIN municipio mun ON mun.Cod = suc.Ciudad
WHERE est.Descripcion LIKE 'Cancelado' AND shr.Ruta_Cod_Rut='$codRut' AND SUM(det.Peso_Kg_U * det.Unidades) <= '$capDisp' GROUP BY ped.Cod


tengo que ver esta información para poder asignar los pedidos al la encomienda que los va a ser transportada,
esto teniendo en cuenta que el camión tiene una capacidad máxima, la cual se irá copando a medida que se agreguen nuevos pedidos;
la variable $capDisp es la capacidad disponible en el camión

necesito ver en una lista desplegable los pedidos para poder seleccionarlos y asignarlos
pero no puedo asignar pedidos que excedan la capacidad, por eso no quiero verlos mientras excedan la capacidad
el peso total de un pedido se calcula multiplicando el peso en Kg de cada unidad que pertenece al pedido (Productos) por el total de unidades y posteriormente sumando todos los resultados
"SUM(det.Peso_Kg_U * det.Unidades)"

necesito ver solo los pedidos que la suma de su peso total no exceda la capacidad disponible en el camión
pero la sentencia "WHERE SUM(det.Peso_Kg_U * det.Unidades) <= '$capDisp' " me arroja un error de sintaxis

#1111 - Invalid use of group function

y no se me ocurre otra opción
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
sin imagen de perfil

mostrar solo los pedidos cuyo peso no exceda la capacidad

Publicado por metalheadb93 (2 intervenciones) el 25/05/2015 06:17:32
vale
buscando por ahí, he encontrado la solución

la columna que arroja una opración no puede ser incluida en una sentencia WHERE

en ese caso se usa HAVING junto con un BROUP BY
la solución a mi problema sería de la siguiente forma


SELECT ped.Cod, mun.Nombre AS Destino, SUM(det.Peso_Kg_U * det.Unidades)AS Peso_Kg, est.Descripcion AS Estado
FROM pedido ped
INNER JOIN control_ped con ON con.Cod_Cod_Ped = ped.Cod
INNER JOIN estado_ped est ON est.Cod = con.Estado_Cod_Est
INNER JOIN detalle_ped det ON det.Pedido_Cod_Pedido = ped.Cod
INNER JOIN sucursal suc ON suc.Cod = ped.Destino_Cod_Suc
INNER JOIN ShR shr ON shr.Estacion_Cod_Suc = suc.Cod
INNER JOIN municipio mun ON mun.Cod = suc.Ciudad WHERE est.Descripcion LIKE 'Cancelado' AND shr.Ruta_Cod_Rut='$codRut' GROUP BY ped.Cod HAVING SUM(det.Peso_Kg_U * det.Unidades) <= '$difPe';


soy nuevo en el foro y no tengo idea d cómo cerrar un hilo así que solo diré
CERRADO!
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