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

Consulta Cruzada funciona a medias

Estas en el tema de Consulta Cruzada funciona a medias en el foro de SQL Server en Foros del Web. Hola, estoy haciendo una consulta de stock vinculando 2 tablas (Pedidos y Productos) que funciona y me da: Nombre del producto / stock / stock ...
  #1 (permalink)  
Antiguo 21/10/2010, 18:25
Avatar de Pablus00  
Fecha de Ingreso: diciembre-2003
Ubicación: A un click de distancia
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 11
Pregunta Consulta Cruzada funciona a medias

Hola, estoy haciendo una consulta de stock vinculando 2 tablas (Pedidos y Productos) que funciona y me da:

Nombre del producto / stock / stock minimo / dias_reposicion / mes8 / mes9 / mes10


TRANSFORM Sum(Pedidos.Cantidad) AS Ventas
SELECT Productos.Nombre, Productos.Stock, Productos.Stock_Minimo, Productos.Dias_Reposicion
FROM Productos INNER JOIN Pedidos ON Productos.idProducto = Pedidos.idProducto
WHERE (((Month([Pedidos].[Fecha])) Between 8 And 10))
GROUP BY Productos.idProducto, Productos.Nombre, Productos.Stock, Productos.Stock_Minimo, Productos.Dias_Reposicion
ORDER BY Productos.idProducto
PIVOT DatePart("m",Fecha);


Estos datos los necesito, para luego hacer unos calculos de resposicion de mercaderia.

El problema que hay productos que no se vendieron en los ultimos 3 meses/productos nuevos que no aparecen en la tabla pedidos, por ende no los muestra...

como tendria que hacer para que me muestre el total del listado de productos, con sus estadisticas, aun en cero si es que no se vendieron?
Muchas gracias
__________________
-- Nunca te des por vencido, aún vencido -- Web
  #2 (permalink)  
Antiguo 21/10/2010, 21:26
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulta Cruzada funciona a medias

¿Tienes la tabla de tus PRODUCTOS (totales)?, debes agregarla en tu consulta
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 22/10/2010, 07:53
Avatar de Pablus00  
Fecha de Ingreso: diciembre-2003
Ubicación: A un click de distancia
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 11
Respuesta: Consulta Cruzada funciona a medias

Hola iislas, estoy iniciandome en esto por eso corregime si digo una burrada, pero productos totales te referis al stock actual? si es asi ya esta agregado pero con alguna de estas 2 lineas:

ON Productos.idProducto = Pedidos.idProducto
WHERE (((Month([Pedidos].[Fecha])) Between 8 And 10))

los productos que no estan pedidos (es decir que no se vendieron nunca)
o aquellos que no se vendieron entre el mes 8-10, no son tomados en cuenta
yo quiero que los incluya aun estando en cero, asi se que producto reponer
__________________
-- Nunca te des por vencido, aún vencido -- Web
  #4 (permalink)  
Antiguo 22/10/2010, 08:04
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta Cruzada funciona a medias

Buenos días Pablus00, el problema está en que utilizas INNER JOIN... esto quiere decir que deben existir registros en ambas tablas (Productos y Pedidos) para que se reflejen en la consulta. De acuerdo a lo que estás comentando de que existen productos que no hay sido pedidos entonces debes utilizar un LEFT JOIN.

Código SQL:
Ver original
  1. FROM Productos LEFT JOIN Pedidos

Haz la prueba y nos comentas

Saludos.
Leo
  #5 (permalink)  
Antiguo 22/10/2010, 08:32
Avatar de Pablus00  
Fecha de Ingreso: diciembre-2003
Ubicación: A un click de distancia
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 11
Respuesta: Consulta Cruzada funciona a medias

Hola leonardo_josue, gracias por responder, recien hice la prueba (ya que sigo haciendo cambios por mi cuenta sin suerte) y no cambio el resultado, probe cambiandole a LEFT y a RIGHT JOIN pero el resultado es el mismo.

Creo que el problema debe estar aca: WHERE (((Month([Pedidos].[Fecha])) Between 8 And 10)) yo pido como condicion que agrupe pedidos del mes 8-10, lo que no se es como ponerle que si no figura (son los productos que no me esta mostrando), que igual lo muestre


Si ayuda, subo una BD de ejemplo para que sea mas grafico mi consulta ;)
__________________
-- Nunca te des por vencido, aún vencido -- Web

Última edición por Pablus00; 22/10/2010 a las 08:35 Razón: Agrego datos
  #6 (permalink)  
Antiguo 22/10/2010, 09:03
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta Cruzada funciona a medias

Hola de nuevo Pabus00

Puedes quitar esta condición de tu cláusula WHERE e integrarla a la Cláusula ON del JOIN. Prueba con esto, para ver si te funciona:

Código SQL:
Ver original
  1. FROM Productos LEFT JOIN Pedidos ON
  2. Productos.idProducto = Pedidos.idProducto AND
  3. MONTH([Pedidos].[Fecha]) BETWEEN 8 AND 10

y no estoy seguro, pero es posible que el SUM te de problemas:

Código SQL:
Ver original
  1. --Así está
  2. SUM(Pedidos.Cantidad)
  3.  
  4. --Puedes cambiarlo por esto
  5. SUM(IsNull(Pedidos.Cantidad, 0))

Pruebalo y nos comentas.

Saludos
Leo.
  #7 (permalink)  
Antiguo 22/10/2010, 09:23
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Consulta Cruzada funciona a medias

Prueba asi:
Código SQL:
Ver original
  1. TRANSFORM SUM(T.Cantidad) AS Ventas
  2. SELECT P.Nombre, P.Stock, P.Stock_Minimo, P.Dias_Reposicion
  3. FROM Productos P
  4. LEFT JOIN Pedidos T ON P.idProducto = T.idProducto
  5. WHERE MONTH(T.Fecha) BETWEEN 8 AND 10 OR T.Fecha IS NULL
  6. GROUP BY P.idProducto, P.Nombre, P.Stock, P.Stock_Minimo, P.Dias_Reposicion
  7. ORDER BY P.idProducto
  8. PIVOT DatePart('m',T.Fecha)
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #8 (permalink)  
Antiguo 22/10/2010, 09:43
Avatar de Pablus00  
Fecha de Ingreso: diciembre-2003
Ubicación: A un click de distancia
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 11
Respuesta: Consulta Cruzada funciona a medias

Barbaro, mil gracias leonardo_josue y flaviovich, ahora si funciono
__________________
-- Nunca te des por vencido, aún vencido -- Web
  #9 (permalink)  
Antiguo 22/10/2010, 16:59
Avatar de Pablus00  
Fecha de Ingreso: diciembre-2003
Ubicación: A un click de distancia
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 11
Respuesta: Consulta Cruzada funciona a medias

Estimados, una ultima correccion que me genera problemas: al haberle agregado OR T.Fecha IS NULL la respuesta a la consulta me agrega un campo nuevo llamado "<>"

O sea, obtengo:

Nombre del producto / stock / stock minimo / dias_reposicion / <> / mes8 / mes9 / mes10

Esa columna que se agrega sola, se puede eliminar?, muchas gracias
__________________
-- Nunca te des por vencido, aún vencido -- Web
  #10 (permalink)  
Antiguo 24/10/2010, 13:02
Avatar de Pablus00  
Fecha de Ingreso: diciembre-2003
Ubicación: A un click de distancia
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 11
Respuesta: Consulta Cruzada funciona a medias

Finalmente le encontre la vuelta a lo que buscaba, gracias por los aportes ;)

TRANSFORM Sum(Pedidos.Cantidad)+Productos.stock AS Ventas
SELECT Productos.Nombre, Productos.Stock, Productos.Stock_Minimo, Productos.Dias_Reposicion
FROM Productos LEFT JOIN Pedidos ON Productos.idProducto = Pedidos.idProducto
GROUP BY Productos.idProducto, Productos.Nombre, Productos.Stock, Productos.Stock_Minimo, Productos.Dias_Reposicion
ORDER BY Productos.idProducto
PIVOT Format([Fecha],"mmm") In ("Sep","Oct","Nov");
__________________
-- Nunca te des por vencido, aún vencido -- Web

Etiquetas: medias
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 15:44.