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

Problema con suma y left joins

Estas en el tema de Problema con suma y left joins en el foro de SQL Server en Foros del Web. Buenos Días! Espero estén bien. Estoy estancada con una consulta sql que no logro sacar. y la consulta por acá a ver si me pueden ...
  #1 (permalink)  
Antiguo 02/11/2015, 08:44
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Problema con suma y left joins

Buenos Días!

Espero estén bien.

Estoy estancada con una consulta sql que no logro sacar. y la consulta por acá a ver si me pueden echar una mano con esto.

Tengo 3 tablas
Notificaciones donde se guardan el código, la cantidad estimada, configurada y fecha de notificaciones
Contacto por evento, donde se guardan el código, cantidad de envíos, exitosos, expirados, no entregados, nulos y la fecha del evento.
Y por último la descripción del evento, donde guardo el código, la gerencia que solicita dicho evento y el costo

Código:
 Notificaciones
           - codigo
           - cantidad_estimada
           - configurada
           - fecha_notificacion
	
    Contacto_por_evento 
           - codigo
           - cantidad_envios 
           - cantidad_exitosos 
           - cantidad_expirados
           - cantidad_noentregados
           - cantidad_nulos
           - fecha_evento

    Descripcion_evento
           - codigo
           - gerencia
           - costo
Lo que trato de obtener es una consulta donde me liste la suma de la cantidad enviada y configurada de la tabla Notificaciones, más la suma de la cantidad de envíos, exitosos, expirados, no entregados y nulos de la tabla Contacto por evento, y que sean listados por la gerencia y la suma del costo por gerencia de la tabla Descripción evento

El query que tengo, me lista lo anterior, pero triplica la suma del costo del evento por Gerencia...

Código SQL:
Ver original
  1. SELECT B.GERENCIA AS GERENCIA,
  2.        SUM(B. COSTO) AS COSTO
  3.        SUM(A.CANTIDAD_CONF) AS CONFIGURADO,
  4.        SUM(C.TOTAL_ENVIOS) AS ENVIADOS,
  5.        SUM(C.TOTAL_EXITOSOS) AS EXITOSOS,
  6.        SUM(C.TOTAL_EXPIRADOS) AS EXPIRADOS,
  7.        SUM(C.TOTAL_NO_ENTREGADOS) AS NO_ENTREGADOS,
  8.        SUM(C.TOTAL_NULOS) AS NULOS,
  9.        SUM(A.CANTIDAD_EST) AS ESTIMADO
  10. FROM NOTIFICACIONES A
  11.      LEFT OUTER JOIN DESCRIPCION_EVENTO B ON A.CODIGO = B.CODIGO
  12.      LEFT OUTER JOIN CONTACTO_POR_EVENTO C ON A.CODIGO = C.CODIGO AND A.FECHA_NOTIF = C.FECHA_COMUNICACION
  13. WHERE DATEPART(MM,A.FECHA_NOTIF) = '10' AND DATEPART(YY,A.FECHA_NOTIF) = '2015' AND B.CANAL = 'SMS'
  14. GROUP BY B.GERENCIA

No entiendo por que triplica la suma del costo por gerencia.

Espero me puedan ayudar, gracias anticipadas.

Última edición por walleskamejias; 02/11/2015 a las 09:15 Razón: Mal etiquetado
  #2 (permalink)  
Antiguo 02/11/2015, 12:30
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Problema con suma y left joins

Supongo que te falta alguna condición en uno de los "Left Join".
¿Como encontrarlo?
Suponemos que con B.GERENCIA=123 la suma es incorrecta.
Empezá con esta consulta:

Código SQL:
Ver original
  1. SELECT *
  2. FROM NOTIFICACIONES A
  3.      LEFT OUTER JOIN DESCRIPCION_EVENTO B ON A.CODIGO = B.CODIGO
  4. WHERE DATEPART(MM,A.FECHA_NOTIF) = '10' AND DATEPART(YY,A.FECHA_NOTIF) = '2015' AND B.CANAL = 'SMS'
  5. AND B.GERENCIA=123;

La salida y el número de las filas son correctos?
Si no - le falta una condición entre A y B.
Si son correctos, probablemente tenés problema con las filas de -
Código SQL:
Ver original
  1. SELECT *
  2. FROM NOTIFICACIONES A
  3.      LEFT OUTER JOIN DESCRIPCION_EVENTO B ON A.CODIGO = B.CODIGO
  4.      LEFT OUTER JOIN CONTACTO_POR_EVENTO C ON A.CODIGO = C.CODIGO AND A.FECHA_NOTIF = C.FECHA_COMUNICACION
  5. WHERE DATEPART(MM,A.FECHA_NOTIF) = '10' AND DATEPART(YY,A.FECHA_NOTIF) = '2015' AND B.CANAL = 'SMS'
  6. AND B.GERENCIA=123;
y te falta una condición entre A y C.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 02/11/2015, 12:41
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con suma y left joins

Gracias por responder

En realidad lo que resulta mal del query es lo siguiente:
Código:
SELECT B.GERENCIA AS GERENCIA,
       SUM(B. COSTO) AS COSTO
       SUM(A.CANTIDAD_CONF) AS CONFIGURADO,
       SUM(C.TOTAL_ENVIOS) AS ENVIADOS,
       SUM(C.TOTAL_EXITOSOS) AS EXITOSOS,
       SUM(C.TOTAL_EXPIRADOS) AS EXPIRADOS,
       SUM(C.TOTAL_NO_ENTREGADOS) AS NO_ENTREGADOS,
       SUM(C.TOTAL_NULOS) AS NULOS,
       SUM(A.CANTIDAD_EST) AS ESTIMADO
FROM NOTIFICACIONES A
     LEFT OUTER JOIN DESCRIPCION_EVENTO B ON A.CODIGO = B.CODIGO
     LEFT OUTER JOIN CONTACTO_POR_EVENTO C ON A.CODIGO = C.CODIGO AND A.FECHA_NOTIF = C.FECHA_COMUNICACION
WHERE DATEPART(MM,A.FECHA_NOTIF) = '10' AND DATEPART(YY,A.FECHA_NOTIF) = '2015' AND B.CANAL = 'SMS'
GROUP BY B.GERENCIA
El resto del query se ejecuta sin inconveniente, el problema es cuando agrego: SUM(B.COSTO) AS COSTO, la suma la triplica, no se como hacer para que no sume tres veces
  #4 (permalink)  
Antiguo 02/11/2015, 13:32
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Problema con suma y left joins

Esta es la única columna de B en el Select,
entonces el problema es en las condiciones (la clausa On) del Left Join B: probablemente te falta una.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #5 (permalink)  
Antiguo 02/11/2015, 13:51
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con suma y left joins

Cita:
Iniciado por GeriReshef Ver Mensaje
Esta es la única columna de B en el Select,
entonces el problema es en las condiciones (la clausa On) del Left Join B: probablemente te falta una.
Gracias por responder GeriReshef!

Pero no falta ninguna condición, arriba puse la estructura y los campos de las tablas que estoy utilizando, y no me faltó nada, no se si sale con consultas anidadas o algo así
  #6 (permalink)  
Antiguo 02/11/2015, 19:46
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Problema con suma y left joins

Saludo
Pues cuando se hace uso del GROUP BY sobre todo
no se obtienen los resultados esperados en primera medida,
en cuyo caso lo más probable es que se deba generar
una subconsulta para el campo en conflicto.

Me recordaron este post.


__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: join, joins, left, query, select, sql, suma, tabla
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 10:05.