Tema: Otra de Join
Ver Mensaje Individual
  #7 (permalink)  
Antiguo 06/10/2008, 20:01
chelodelsur
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Otra de Join

Nuevamente gracias Jurena por el tiempo que dedicas a ayudar.

Mira actualmente tengo estas 2 consultas que ejecuto separadamente y con las que contruyo un solo informe, de momento exporto los datos (excel) y luego los junto para hacer una sola hoja con el Informe.

La idea es poder ejecutar una sola consulta y dejarla lista para la vista del usuario final.
Como explicaba antes lo unico que liga los datos de estas tablas son el campo fecha, siempre existirán en ambas tablas todas la fechas. y sí tienes razon en las consultas por separado como verás en los códigos hay varias agrupaciones o sumas de datos.
Las consultas por separado funcionan bien, pero al juntarlas me multiplica los datos en funcion de la catidad de registros para una misma fecha en la otra tabla por ejemplo en la tabla log hay solo un registro por cada fecha, sin embargo en la tabla reg_diario, hay entre 3 a 5 registros para cada fecha, lo que hace que al hacer el cruce, los datos de la tabla log sena mutiplicados por 3 o 5 dependiendo de los registros para esa fecha que existan en la tabla reg_diario.

Ufff no solo suena enredado, es realmente enredado



CODIGO 1
Código:
SELECT 
reg_diario.fecha_date,
SUM(IF(TIPO_LLAMADA='CAI',RECIBIDO,0)) CAI,
SUM(IF(TIPO_LLAMADA='IVR COMERCIAL',RECIBIDO,0)) IVR_COM,
SUM(IF(TIPO_LLAMADA='IVR SUMINISTRO',RECIBIDO,0)) IVR_SUMI,
SUM(IF(TIPO_LLAMADA='IVR OTROS',RECIBIDO,0)) IVR_OTROS,
SUM(IF(TIPO_LLAMADA='OFICINA',RECIBIDO,0)) OFICINA,
SUM(IF(TIPO_LLAMADA='CALEFACCION',RECIBIDO,0)) CALEFC,
SUM(IF(TIPO_LLAMADA='CAI' OR TIPO_LLAMADA='IVR COMERCIAL' OR TIPO_LLAMADA='IVR SUMINISTRO' OR TIPO_LLAMADA='IVR OTROS' OR TIPO_LLAMADA='OFICINA' OR TIPO_LLAMADA='CALEFACCION',RECIBIDO,0)) TOTAL_RECIBIDO_ACD,
SUM(IF(TIPO_LLAMADA='CAI' OR TIPO_LLAMADA='IVR COMERCIAL' OR TIPO_LLAMADA='IVR SUMINISTRO' OR TIPO_LLAMADA='IVR OTROS' OR TIPO_LLAMADA='OFICINA' OR TIPO_LLAMADA='CALEFACCION',CONTESTADO,0)) TOTAL_CONTESTADO_AGENTES,
SUM(IF(TIPO_LLAMADA='CAI' OR TIPO_LLAMADA='IVR COMERCIAL' OR TIPO_LLAMADA='IVR SUMINISTRO' OR TIPO_LLAMADA='IVR OTROS' OR TIPO_LLAMADA='OFICINA' OR TIPO_LLAMADA='CALEFACCION',ABANDONADO,0)) TOTAL_ABANDONADO,
FORMAT((SUM(IF(TIPO_LLAMADA='CAI' OR TIPO_LLAMADA='IVR COMERCIAL' OR TIPO_LLAMADA='IVR SUMINISTRO' OR TIPO_LLAMADA='IVR OTROS' OR TIPO_LLAMADA='OFICINA' OR TIPO_LLAMADA='CALEFACCION',ABANDONADO,0))/SUM(IF(TIPO_LLAMADA='CAI' OR TIPO_LLAMADA='IVR COMERCIAL' OR TIPO_LLAMADA='IVR SUMINISTRO' OR TIPO_LLAMADA='IVR OTROS' OR TIPO_LLAMADA='OFICINA' OR TIPO_LLAMADA='CALEFACCION',RECIBIDO,0)))*100,0)TASA_ABANDONO,
FORMAT(((SUM(IF(TIPO_LLAMADA='CAI' OR TIPO_LLAMADA='IVR COMERCIAL' OR TIPO_LLAMADA='IVR SUMINISTRO' OR TIPO_LLAMADA='IVR OTROS' OR TIPO_LLAMADA='OFICINA' OR TIPO_LLAMADA='CALEFACCION',NIVEL_SERV_NUMERADOR,0)))/ (SUM(IF(TIPO_LLAMADA='CAI' OR TIPO_LLAMADA='IVR COMERCIAL' OR TIPO_LLAMADA='IVR SUMINISTRO' OR TIPO_LLAMADA='IVR OTROS' OR TIPO_LLAMADA='OFICINA' OR TIPO_LLAMADA='CALEFACCION',NIVEL_SERV_DENOMINADOR,0))))*100,0) NIVEL_SERVICIO
FROM rrserver.reg_diario 
WHERE reg_diario.fecha_date 
BETWEEN '2008-09-29'
AND '2008-10-31'
GROUP BY reg_diario.fecha_date
CODIGO 2
Código:
SELECT Year(log_0.fecha_date) as `AÑO`,  
CASE 
 WHEN MONTH(log_0.fecha_date) = 1 THEN "enero"  
 WHEN MONTH(log_0.fecha_date) = 2 THEN "febrero" 
 WHEN MONTH(log_0.fecha_date) = 3 THEN "marzo" 
 WHEN MONTH(log_0.fecha_date) = 4 THEN "abril" 
 WHEN MONTH(log_0.fecha_date) = 5 THEN "mayo" 
 WHEN MONTH(log_0.fecha_date) = 6 THEN "junio" 
 WHEN MONTH(log_0.fecha_date) = 7 THEN "julio" 
 WHEN MONTH(log_0.fecha_date) = 8 THEN "agosto" 
 WHEN MONTH(log_0.fecha_date) = 9 THEN "septiembre" 
 WHEN MONTH(log_0.fecha_date) = 10 THEN "octubre" 
 WHEN MONTH(log_0.fecha_date) = 11 THEN "noviembre" 
 WHEN MONTH(log_0.fecha_date) = 12 THEN "diciembre"  
ELSE 'NUUL_MES' END  AS MES ,
log_0.fecha_date as `FECHA`,  
CASE  
WHEN weekday(log_0.fecha_date) = 0 THEN "Lunes"  
WHEN weekday(log_0.fecha_date) = 1 THEN "Martes" 
WHEN weekday(log_0.fecha_date) = 2 THEN "Miercoles"  
WHEN weekday(log_0.fecha_date) = 3 THEN "Jueves"  
WHEN weekday(log_0.fecha_date) = 4 THEN "Viernes" 
WHEN weekday(log_0.fecha_date) = 5 THEN "Sabado"  
WHEN weekday(log_0.fecha_date) = 6 THEN "Domingo" 
 ELSE 'NUUL_DIA' END AS DIA,   
 SUM(IF(empresa_sele='OFICINA2' OR empresa_sele='OFICINA1' OR empresa_sele='OFICINA3' OR empresa_sele='OFICINA4',1,0)) AS CONSULTAS_BD,    
 SUM(IF(TRF_AGENTE='8296' OR TRF_AGENTE='8297' OR TRF_AGENTE='8298' OR TRF_AGENTE='8299',1,0)) AS TRANSFERIDO_ACD,   SUM(IF(t_mensaje='',1,0)) AS NO_ESC_MSJE,  
  sum(IF(trf_agente='',t_mensaje='CODIGO' OR t_mensaje='GENERAL' OR t_mensaje='GENERAL PRE' OR t_mensaje='HOTLINE'OR t_mensaje='HOTLINE-ANEXO',0))as ATE_MENSAJE_ESPECIAL_IVR,   
 SUM(IF(t_mensaje='CODIGO' OR t_mensaje='GENERAL' OR t_mensaje='GENERAL PRE' OR t_mensaje='HOTLINE'OR t_mensaje=         'HOTLINE-ANEXO',1,0)) AS TOTAL_MSJE_ESPECIAL_IVR,  
  SUM(IF(ROW_ID,1,0)) AS TOTAL_TRAFICO  
FROM ivr.log  
WHERE log_0.fecha_date>='2008-10-01'  
AND log_0.fecha_date<='2008-10-31'  
GROUP BY YEAR(log_0.fecha_date),MONTH(log_0.fecha_date),(log_0.fecha_date) 
ORDER BY (log_0.fecha_date)
Bueno espero su ayuda

Gracias una vez más