HAber si logro explicar mejor lo que pasa.
este query levanta los datos agrupados por año para cada agente. OK (ignoren el Case y la columna mes )
Código:
Select
distinct a.agente_evaluado AGENTE,
Year(Fecha_evaluacion) as 'Año',
CASE
WHEN MONTH(fecha_evaluacion) = 1 THEN "enero"
WHEN MONTH(fecha_evaluacion) = 2 THEN "febrero"
WHEN MONTH(fecha_evaluacion) = 3 THEN "marzo"
WHEN MONTH(fecha_evaluacion) = 4 THEN "abril"
WHEN MONTH(fecha_evaluacion) = 5 THEN "mayo"
WHEN MONTH(fecha_evaluacion) = 6 THEN "junio"
WHEN MONTH(fecha_evaluacion) = 7 THEN "julio"
WHEN MONTH(fecha_evaluacion) = 8 THEN "agosto"
WHEN MONTH(fecha_evaluacion) = 9 THEN "septiembre"
WHEN MONTH(fecha_evaluacion) = 10 THEN "octubre"
WHEN MONTH(fecha_evaluacion) = 11 THEN "noviembre"
WHEN MONTH(fecha_evaluacion) = 12 THEN "diciembre"
ELSE "NUUL_MES" END AS MES ,
SUM(IF(ID_LLAMADA>0,1,0))as 'TOTAL EVALUACIONES',
(select
count(b.errores_fatales)
from evaluaciones d
inner join notas_evaluaciones b
on d.id_evaluacion = b.id_evaluacion
where (d.identifica_cliente='1'OR d.escucha_activa='1' OR d.asesorar='1'
OR d.conocimiento_producto='1' OR d.procedimientos='1' OR d.ingreso_datos='1')
and d.agente_evaluado=a.agente_evaluado ) as 'TOT EVAL CON ERRORES FATALES',
SUM(b.errores_fatales) as 'TOT ERRORES FATALES',
format(avg(b.NOTA_AREA_1),1) as `ESTILO MANEJO LLAMADA`,
format(avg(b.NOTA_AREA_2),1) as `ESTRUCTURA / HABILIDADES`,
format(avg(b.NOTA_AREA_3),1) as `EFICIENCIA / CONOCIMIENTO`,
format(avg(b.NOTA_EVALUACION),1) as `NOTA FINAL`
FROM evaluaciones a
INNER JOIN notas_evaluaciones b
ON a.id_evaluacion = b.id_evaluacion
left join agentes c
oN a.agente_evaluado = c.nombre_agente
where a.fecha_evaluacion between '2008/01/01' and '2008/12/31'
And a.agente_evaluado like'%'
and c.estado='activo'
and (c.tipo_turno='full time' or c.tipo_turno='part time')
GROUP BY a.agente_evaluado, año ORDER BY a.agente_evaluado asc, fecha_evaluacion asc;
Ahora si a este mismo codigo le cambio el group by de año a id_evaluación, para que me muestre todas la evaluaciones por agente. tengo que agregarle al where del select anidado la condición de igualdad entre las dos consultas, caso contrario me devolvía el total del año para cada registro de es agente. Bien esto tambien ya está ok
Código:
Select
distinct a.agente_evaluado AGENTE,
Year(Fecha_evaluacion) as 'Año',
CASE
WHEN MONTH(fecha_evaluacion) = 1 THEN "enero"
WHEN MONTH(fecha_evaluacion) = 2 THEN "febrero"
WHEN MONTH(fecha_evaluacion) = 3 THEN "marzo"
WHEN MONTH(fecha_evaluacion) = 4 THEN "abril"
WHEN MONTH(fecha_evaluacion) = 5 THEN "mayo"
WHEN MONTH(fecha_evaluacion) = 6 THEN "junio"
WHEN MONTH(fecha_evaluacion) = 7 THEN "julio"
WHEN MONTH(fecha_evaluacion) = 8 THEN "agosto"
WHEN MONTH(fecha_evaluacion) = 9 THEN "septiembre"
WHEN MONTH(fecha_evaluacion) = 10 THEN "octubre"
WHEN MONTH(fecha_evaluacion) = 11 THEN "noviembre"
WHEN MONTH(fecha_evaluacion) = 12 THEN "diciembre"
ELSE "NUUL_MES" END AS MES ,
SUM(IF(ID_LLAMADA>0,1,0))as 'TOTAL EVALUACIONES',
(select
count(b.errores_fatales)
from evaluaciones d
inner join notas_evaluaciones b
on d.id_evaluacion = b.id_evaluacion
where (d.identifica_cliente='1'OR d.escucha_activa='1' OR d.asesorar='1'
OR d.conocimiento_producto='1' OR d.procedimientos='1' OR d.ingreso_datos='1')
and d.agente_evaluado=a.agente_evaluado
and d.id_evaluacion = a.id_evaluacion) as 'TOT EVAL CON ERRORES FATALES',
SUM(b.errores_fatales) as 'TOT ERRORES FATALES',
format(avg(b.NOTA_AREA_1),1) as `ESTILO MANEJO LLAMADA`,
format(avg(b.NOTA_AREA_2),1) as `ESTRUCTURA / HABILIDADES`,
format(avg(b.NOTA_AREA_3),1) as `EFICIENCIA / CONOCIMIENTO`,
format(avg(b.NOTA_EVALUACION),1) as `NOTA FINAL`
FROM evaluaciones a
INNER JOIN notas_evaluaciones b
ON a.id_evaluacion = b.id_evaluacion
left join agentes c
oN a.agente_evaluado = c.nombre_agente
where a.fecha_evaluacion between '2008/01/01' and '2008/12/31'
And a.agente_evaluado like'%'
and c.estado='activo'
and (c.tipo_turno='full time' or c.tipo_turno='part time')
GROUP BY a.agente_evaluado, a.id_evaluacionORDER BY a.agente_evaluado asc, fecha_evaluacion asc;
Bien ahora necesito los mismos datos pero agrupados por mes, entonces cambié el gropu by a mes , y hasta ahí no mas llego. he cambiado los filtros del where en el select anidado, probado de varias manera el group by y nada.
Código:
Select
distinct a.agente_evaluado AGENTE,
Year(Fecha_evaluacion) as 'Año',
CASE
WHEN MONTH(fecha_evaluacion) = 1 THEN "enero"
WHEN MONTH(fecha_evaluacion) = 2 THEN "febrero"
WHEN MONTH(fecha_evaluacion) = 3 THEN "marzo"
WHEN MONTH(fecha_evaluacion) = 4 THEN "abril"
WHEN MONTH(fecha_evaluacion) = 5 THEN "mayo"
WHEN MONTH(fecha_evaluacion) = 6 THEN "junio"
WHEN MONTH(fecha_evaluacion) = 7 THEN "julio"
WHEN MONTH(fecha_evaluacion) = 8 THEN "agosto"
WHEN MONTH(fecha_evaluacion) = 9 THEN "septiembre"
WHEN MONTH(fecha_evaluacion) = 10 THEN "octubre"
WHEN MONTH(fecha_evaluacion) = 11 THEN "noviembre"
WHEN MONTH(fecha_evaluacion) = 12 THEN "diciembre"
ELSE "NUUL_MES" END AS MES ,
SUM(IF(ID_LLAMADA>0,1,0))as 'TOTAL EVALUACIONES',
(select
count(b.errores_fatales)
from evaluaciones d
inner join notas_evaluaciones b
on d.id_evaluacion = b.id_evaluacion
where (d.identifica_cliente='1'OR d.escucha_activa='1' OR d.asesorar='1'
OR d.conocimiento_producto='1' OR d.procedimientos='1' OR d.ingreso_datos='1')
and d.agente_evaluado = a.agente_evaluado
and d.id_evaluacion = a.id_evaluacion) as 'TOT EVAL CON ERRORES FATALES',
SUM(b.errores_fatales) as 'TOT ERRORES FATALES',
format(avg(b.NOTA_AREA_1),1) as `ESTILO MANEJO LLAMADA`,
format(avg(b.NOTA_AREA_2),1) as `ESTRUCTURA / HABILIDADES`,
format(avg(b.NOTA_AREA_3),1) as `EFICIENCIA / CONOCIMIENTO`,
format(avg(b.NOTA_EVALUACION),1) as `NOTA FINAL`
FROM evaluaciones a
INNER JOIN notas_evaluaciones b
ON a.id_evaluacion = b.id_evaluacion
left join agentes c
oN a.agente_evaluado = c.nombre_agente
where a.fecha_evaluacion between '2008/01/01' and '2008/12/31'
And a.agente_evaluado like'%'
and c.estado='activo'
and (c.tipo_turno='full time' or c.tipo_turno='part time')
GROUP BY a.agente_evaluado, mes ORDER BY a.agente_evaluado asc, fecha_evaluacion asc;
Por ejemplo si en el group by tengo mes, y en el where del select anidado no tengo puesta la condición "
and d.id_evaluacion = a.id_evaluacion" la consulta me devuelve en la columna 'TOT EVAL CON ERRORES FATALES', el total de errores de ese usuario en el año. Ahora si agrego al where del select anidado "
and d.id_evaluacion = a.id_evaluacion" la consulta me devuelve el valor del primer mes con registros para un usuario en particular.
Se agradece su paciencia y ayuda
Chelo