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

Compras del dia

Estas en el tema de Compras del dia en el foro de SQL Server en Foros del Web. Buenos Días, Me podrían ayudar hice la suma de varios productos pero lo que es Diesel y premium me lo esta multiplicando por 4, la ...
  #1 (permalink)  
Antiguo 06/06/2014, 12:12
 
Fecha de Ingreso: mayo-2014
Mensajes: 7
Antigüedad: 9 años, 10 meses
Puntos: 0
Compras del dia

Buenos Días,

Me podrían ayudar hice la suma de varios productos pero lo que es Diesel y premium me lo esta multiplicando por 4, la compras que se hicieron en ese día de Magna es 80916
Premium 20026
Diesel 20666
Gracias
Código SQL:
Ver original
  1. SELECT  T.PRODUCTOPEMEX, T.NOMBRE,
  2. SUM(T.VOLUMENRECEPCION) AS VOLUMENDIESEL, R.PRODUCTOPEMEX, R.NOMBRE,
  3. SUM(R.VOLUMENRECEPCION) AS VOLUMENMAGNA, S.PRODUCTOPEMEX, S.NOMBRE,
  4. SUM(S.VOLUMENRECEPCION) AS VOLUMENPREMIUM
  5. FROM  
  6. (SELECT P.CODIGO, P.NOMBRE, AREC.VOLUMENRECEPCION,AREC.PRODUCTOPEMEX  FROM ARCHIVOREC AS AREC INNER JOIN PRODUCTO AS P
  7. ON AREC.PRODUCTOPEMEX = P.CODIGO
  8. WHERE YEAR (FECHARECEPCION)=2014 AND MONTH (FECHARECEPCION)=6 AND DAY(FECHARECEPCION)=4 AND productopemex=34006                            
  9. ) AS T ,
  10. (SELECT PP.CODIGO, PP.NOMBRE, AREC.VOLUMENRECEPCION, AREC.PRODUCTOPEMEX  
  11. FROM ARCHIVOREC AS AREC INNER JOIN PRODUCTO AS PP
  12. ON AREC.PRODUCTOPEMEX = PP.CODIGO
  13. WHERE YEAR (FECHARECEPCION)=2014 AND MONTH (FECHARECEPCION)=6 AND DAY(FECHARECEPCION)=4 AND productopemex=32011                          
  14. ) AS R,
  15. (SELECT P.CODIGO, P.NOMBRE, AREC.VOLUMENRECEPCION,AREC.PRODUCTOPEMEX  
  16. FROM ARCHIVOREC AS AREC INNER JOIN PRODUCTO AS P
  17. ON AREC.PRODUCTOPEMEX = P.CODIGO
  18. WHERE YEAR (FECHARECEPCION)=2014 AND MONTH (FECHARECEPCION)=6 AND DAY(FECHARECEPCION)=4 AND productopemex=32012                            
  19. ) AS S          
  20. GROUP BY T.NOMBRE, T.PRODUCTOPEMEX, R.PRODUCTOPEMEX , R.NOMBRE ,S.PRODUCTOPEMEX,S.NOMBRE
  21. ORDER BY T.PRODUCTOPEMEX

Última edición por gnzsoloyo; 06/06/2014 a las 12:39
  #2 (permalink)  
Antiguo 06/06/2014, 12:19
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Compras del dia

estas haciendo join's implicitos por lo que estas haciendo un producto cartesiano si no le dices que valor es el que une cada query..en tu caso te falta esto:

Código SQL:
Ver original
  1. SELECT T.PRODUCTOPEMEX, T.NOMBRE,
  2. SUM(T.VOLUMENRECEPCION) AS VOLUMENDIESEL, R.PRODUCTOPEMEX, R.NOMBRE,
  3. SUM(R.VOLUMENRECEPCION) AS VOLUMENMAGNA, S.PRODUCTOPEMEX, S.NOMBRE,
  4. SUM(S.VOLUMENRECEPCION) AS VOLUMENPREMIUM
  5. FROM
  6. (SELECT P.CODIGO, P.NOMBRE, AREC.VOLUMENRECEPCION,AREC.PRODUCTOPEMEX FROM ARCHIVOREC AS AREC INNER JOIN PRODUCTO AS P
  7. ON AREC.PRODUCTOPEMEX = P.CODIGO
  8. WHERE YEAR (FECHARECEPCION)=2014 AND MONTH (FECHARECEPCION)=6 AND DAY(FECHARECEPCION)=4 AND productopemex=34006
  9. ) AS T ,
  10. (SELECT PP.CODIGO, PP.NOMBRE, AREC.VOLUMENRECEPCION, AREC.PRODUCTOPEMEX
  11. FROM ARCHIVOREC AS AREC INNER JOIN PRODUCTO AS PP
  12. ON AREC.PRODUCTOPEMEX = PP.CODIGO
  13. WHERE YEAR (FECHARECEPCION)=2014 AND MONTH (FECHARECEPCION)=6 AND DAY(FECHARECEPCION)=4 AND productopemex=32011
  14. ) AS R,
  15. (SELECT P.CODIGO, P.NOMBRE, AREC.VOLUMENRECEPCION,AREC.PRODUCTOPEMEX
  16. FROM ARCHIVOREC AS AREC INNER JOIN PRODUCTO AS P
  17. ON AREC.PRODUCTOPEMEX = P.CODIGO
  18. WHERE YEAR (FECHARECEPCION)=2014 AND MONTH (FECHARECEPCION)=6 AND DAY(FECHARECEPCION)=4 AND productopemex=32012
  19. ) AS S WHERE (t.codigo=r.codigo AND s.codigo=r.codigo) AND (t.nombre=s.nombre AND s.nombre=r.nom
  20. GROUP BY T.NOMBRE, T.PRODUCTOPEMEX, R.PRODUCTOPEMEX , R.NOMBRE ,S.PRODUCTOPEMEX,S.NOMBRE
  21. ORDER BY T.PRODUCTOPEMEX
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 06/06/2014, 12:35
 
Fecha de Ingreso: mayo-2014
Mensajes: 7
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Compras del dia

Ya intente, no me depliega ningun valor
  #4 (permalink)  
Antiguo 06/06/2014, 13:38
 
Fecha de Ingreso: mayo-2014
Mensajes: 7
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Compras del dia

como puedo reducir los inner join para no hacer un producto cartesiano?
  #5 (permalink)  
Antiguo 06/06/2014, 14:08
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Compras del dia

no entendiste lo que te comente, lo que te estoy diciendo es que no estas amarrando las tablas de manera correcta no estas indicando cual es el campo para enlazarlas y al no hacer eso sql server lo que hace es un producto cartesiano, si mi solucion en el where no funciono prueba con otras columnas, tu eres el que conoce los datos no???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: compras, dia, select
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:22.