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

Sql con meses y por empleados

Estas en el tema de Sql con meses y por empleados en el foro de Mysql en Foros del Web. Hola buenas. Estoy intentando realizar una consulta pero no consigo que se muestre lo que quiero. La consulta que quiero sacar es un listado por ...
  #1 (permalink)  
Antiguo 08/02/2012, 03:17
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 16 años, 6 meses
Puntos: 0
Sql con meses y por empleados

Hola buenas.

Estoy intentando realizar una consulta pero no consigo que se muestre lo que quiero.

La consulta que quiero sacar es un listado por meses y por empleados. Y consigo hacerla, pero los meses donde un empleado no tiene , no me muestra nada, y lo que yo quiero es que me muestre todos los meses y todos los empleados.

Yo quiero conseguir un resultado así:

Código:
Abril			8	Juan
Abril			0	Marcela
Abril			0	Jose Antonio
Julio			0	Juan
Julio			1	Marcela
Julio			0	Jose Antonio
Agosto			0	Juan
Agosto			1	Marcela
Agosto			1	Jose Antonio
Septiembre		0	Juan
Septiembre		1	Marcela
Septiembre		1	Jose Antonio
Octubre			0	Juan
Octubre			2	Marcela
Octubre			0	Jose Antonio
Noviembre		3	Juan
Noviembre		19	Marcela
Noviembre		5	Jose Antonio
Diciembre		0	Juan
Diciembre		4	Marcela
Diciembre		4	Jose Antonio
Febrero			0	Juan
Febrero			2	Marcela
Febrero			0	Jose Antonio
Y lo único que consigo es esto:

Código:
Abril			8	Juan
Julio			1	Marcela
Agosto			1	Jose Antonio
Agosto			1	Marcela
Septiembre		1	Jose Antonio
Septiembre		1	Marcela
Octubre			2	Marcela
Noviembre		5	Jose Antonio
Noviembre		19	Marcela
Diciembre		4	Marcela
Febrero			2	Marcela
Es decir, los meses donde un empleado no tiene datos, no los muestra.

La consulta la hago relacionando 3 tablas, una con los datos principales, otra que hace de conexión entre la principal y la de empleados con un campo más de fecha, y la de empleados, de modo que la sql me queda de éste modo:

Código SQL:
Ver original
  1. SELECT
  2.         CASE WHEN MONTH(f_encargo) = 1 THEN 'Enero'
  3.         WHEN MONTH(f_encargo) = 2 THEN 'Febrero'
  4.         WHEN MONTH(f_encargo) = 3 THEN 'Marzo'
  5.         WHEN MONTH(f_encargo) = 4 THEN 'Abril'
  6.         WHEN MONTH(f_encargo) = 5 THEN 'Mayo'
  7.         WHEN MONTH(f_encargo) = 6 THEN 'Junio'
  8.         WHEN MONTH(f_encargo) = 7 THEN 'Julio'
  9.         WHEN MONTH(f_encargo) = 8 THEN 'Agosto'
  10.         WHEN MONTH(f_encargo) = 9 THEN 'Septiembre'
  11.         WHEN MONTH(f_encargo) = 10 THEN 'Octubre'
  12.         WHEN MONTH(f_encargo) = 11 THEN 'Noviembre'
  13.         WHEN MONTH(f_encargo) = 12 THEN 'Diciembre'
  14.         ELSE 'No Mes' END AS Meses
  15.     ,  IFNULL(COUNT(v.REF), 0) AS Total, emv.Nombre
  16.     FROM ventas  AS v
  17.     RIGHT JOIN ventas_usuario AS vent ON v.REF = vent.REF
  18.     RIGHT JOIN empleados AS emp ON vent.id_usu = emp .id_emp
  19.         WHERE  emp .id_emp = (SELECT id_usu FROM ventas_usuario WHERE REF = v.REF ORDER BY fecha DESC LIMIT 0, 1)
  20.     GROUP BY YEAR(f_encargo), MONTH(f_encargo), emp .Nombre

A ver si me podéis echar un cable.

Muchas gracias
  #2 (permalink)  
Antiguo 08/02/2012, 12:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Sql con meses y por empleados

krato,

primero debes tener una tabla con todos los meses, ya sabes, idMes y Mes. El idMes es el número de mes.
Luego cruzas primero las dos tablas así SELECT u.idUsuario, m.idMes FROM usuarios u, meses m para que te dé pares de usuarios con todos los meses; luego cruzas mediante left join con la tabla usuariodia, tabla donde yo he puesto los campos idUsuario y Dia (que es fecha), finalmente hago el group by por idUsuario e idMes. Observa la consulta:

SELECT t1.idUsuario, t1.idmes, COUNT(ud.Dia) FROM (SELECT u.idUsuario, m.idMes FROM usuarios u, meses m)t1 LEFT JOIN usuariodia ud ON t1.idUsuario = ud.idUsuario AND t1.idMes = MONTH(ud.Dia) GROUP BY t1.idUsuario, t1.idMes

Luego pondremos los datos de nombres de usuario y de mes, ahora más fácil desde la tabla meses.

Pero ojo, esto que hemos hecho entraña un peligro, agrupa por meses y usuario, pero no por mes año y usuario, y no olvides que un mes no es un mes, sino un mes de un año. Tendrías que tener una tabla con los años de los que quieres sacar datos para hacer otro cruce. Piensa en ello.
  #3 (permalink)  
Antiguo 21/03/2012, 05:25
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Sql con meses y por empleados

Ok. Probaré. Muchas gracias!!

Etiquetas: empleados, join, meses, select, sql, tabla, campos
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 09:54.