Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta inner join con resultado inesperado

Estas en el tema de Consulta inner join con resultado inesperado en el foro de SQL Server en Foros del Web. que tal, buenas con todos, el problema es el siguiente tengo una base con 3 tablas, una de productos, otra de distribucion y otra de ...
  #1 (permalink)  
Antiguo 28/04/2009, 08:30
 
Fecha de Ingreso: marzo-2008
Mensajes: 10
Antigüedad: 16 años, 2 meses
Puntos: 1
Pregunta Consulta inner join con resultado inesperado

que tal, buenas con todos, el problema es el siguiente tengo una base con 3 tablas, una de productos, otra de distribucion y otra de ventas, con la siguiente estructura

Producto:
id, producto, precio, stock

Distribucion:
Id, Id_producto, cantidad, fecha

ventas:
Id, Id_producto, cantidad, fecha

la consulta es esta:
SELECT p.id, p.producto, sum(d.cantidad) distribuido, sum(v.cantidad) vendido from productos p
inner join distribucion d on d.id_producto=p.id
inner join ventas v on v.id_producto=p.id
group by p.id, p.producto

Como se puede ver quiero hacer un reporte que devuelva los productos, lo distribuido y lo vendido, el problema surge cuando distribuyo 3 producto y solo vendo 2, en ese caso solo devuelve 2 prodcutos:

id Producto distribuido vendido
1 Producto1 150 100
2 Producto2 200 120

yo esperaba que fuera asi
id Producto distribuido vendido
1 Producto1 150 100
2 Producto2 200 120
3 Producto3 300 0 <-- eh aqui el problema

me parece que como devuelve un valor 0 o nulo la consulta count no lo muestra, o no se. si algun iluminado me pudiera ayudar con esto, estaria muy agradecido. saludos

Giovanni :D
  #2 (permalink)  
Antiguo 28/04/2009, 08:46
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Consulta inner join con resultado inesperado

segun lo que comentas, tienes el producto 3 en la tabla ventas con cantidad cero...

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 28/04/2009, 09:00
 
Fecha de Ingreso: abril-2009
Ubicación: Sunchales
Mensajes: 67
Antigüedad: 15 años
Puntos: 0
Respuesta: Consulta inner join con resultado inesperado

proba ponerle un LEFT JOIN a la tabla ventas.

SELECT p.id, p.producto, sum(d.cantidad) distribuido, sum(v.cantidad) vendido from productos p
inner join distribucion d on d.id_producto=p.id
LEFT JOIN ventas v on v.id_producto=p.id
group by p.id, p.producto
  #4 (permalink)  
Antiguo 28/04/2009, 09:03
 
Fecha de Ingreso: marzo-2008
Mensajes: 10
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Consulta inner join con resultado inesperado

Cita:
Iniciado por Andres95 Ver Mensaje
segun lo que comentas, tienes el producto 3 en la tabla ventas con cantidad cero...

Saludos!
te explico, cada item se va agregando mediante una interface, hay productos que algunos dias se distribuyen y otros que no, claro si agrego todos los productos con cantidad 0 funcionaria, pero si tengo 500 productos no puedo agregarlo uno por uno con valor 0, lo otro seria que lo haga el programa, pero eso significaria llenar la base de datos con informacion que no se utilizaria, con muchos registros con valores 0, bueno eso es cosa ya de programacion, pero la pregunta era si hay alguna forma de hacer la consulta y de el resultado que puse primero.

o se que si se distribuyo un producto pero no se realizo venta de este devuelva algo asi:

producto distb. venta
producto1 100 0

salu2
  #5 (permalink)  
Antiguo 28/04/2009, 09:10
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Consulta inner join con resultado inesperado

pense que el problema es que te aparecia el registro en cero.

y en realidad no aparece y lo que necesitas es que aparezca, perdon por el mal entendido.

Y de hecho te hago la misma recomendacion que nicomariani, solo que al sumar la cantidad vendida agregale un isnull para que cambie los nulos por ceros, por ejemplo..

sum(isnull(v.cantidad, 0))


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #6 (permalink)  
Antiguo 28/04/2009, 09:12
 
Fecha de Ingreso: marzo-2008
Mensajes: 10
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Consulta inner join con resultado inesperado

Cita:
Iniciado por nicomariani Ver Mensaje
proba ponerle un LEFT JOIN a la tabla ventas.

SELECT p.id, p.producto, sum(d.cantidad) distribuido, sum(v.cantidad) vendido from productos p
inner join distribucion d on d.id_producto=p.id
LEFT JOIN ventas v on v.id_producto=p.id
group by p.id, p.producto
Amigo, gracias por la respuesta, efectivamente es la solucion que buscaba, solo le adicione Isnull para que devuelva valor cero, la consulta quedaria asi:


sELECT p.id, p.producto, isnull(sum(d.cantidad),0) distribuido, isnull(sum(v.cantidad),0) vendido from productos p
inner join distribucion d on d.id_producto=p.id
LEFT JOIN ventas v on v.id_producto=p.id
group by p.id, p.producto

denuevo muchas gracias, t pasaste nicomariani!!

  #7 (permalink)  
Antiguo 28/04/2009, 09:17
 
Fecha de Ingreso: marzo-2008
Mensajes: 10
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Consulta inner join con resultado inesperado

Cita:
Iniciado por Andres95 Ver Mensaje
pense que el problema es que te aparecia el registro en cero.

y en realidad no aparece y lo que necesitas es que aparezca, perdon por el mal entendido.

Y de hecho te hago la misma recomendacion que nicomariani, solo que al sumar la cantidad vendida agregale un isnull para que cambie los nulos por ceros, por ejemplo..

sum(isnull(v.cantidad, 0))


Saludos!
si muchas gracias, en efecto yo tmb le agregue el isnull... gracias x todo a los 2, saludos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:40.