Soy un recién llegado a la programación y las bases de datos y agradecería un poco de ayuda en el siguiente escenario.
Yo uso PHP con SQL Server. Estoy creando un sistema de asistencia de empleados y me gustaría crear una tabla (pivote) con meses como filas y todos los días de la semana como columnas (para un año específico). Los valores en las celdas serán el número de días (1, 2, 3 ... 31).
El color de fondo de la celda (ya existe como columna de tabla) declara el tipo de licencia de los empleados. La tabla tiene las siguientes columnas: employee_id, leave_date, leave_type, leave_type_color
.
Quiero lograr un resultado como el siguiente:
Gracias.
sql-server
php
pivot
Mike T
fuente
fuente
Respuestas:
La parte más compleja de esto es simplemente construir el calendario en ese formato. Girar y rodearlo con HTML es bastante fácil. Primero, comencemos con esto, su tabla de empleados con fechas de licencia.
leave_type
no parecía relevante para el problema en cuestión.El procedimiento que se me ocurrió se ve así (y advertencia: se supone
@@DATEFIRST = 7
):Resultados de esta convocatoria:
Se parece a esto (me detuve en la columna del séptimo día):
Tendrá que agregar el
<table>
/</table>
wrapper usted mismo, pero así es como se ve el resultado cuando se coloca entre ellos y se guarda como HTML (y, por supuesto, puede mejorarlo aún más con CSS):Cuando la licencia cae en un fin de semana, el color de la licencia triunfa sobre el color del fin de semana, pero eso es fácil de ajustar. Cambia esto:
A esto:
Para convertir un color en formato decimal (como
65280
) a su equivalente RGB (00FF00
), debe hacer un montón de manipulación. Consideraría almacenarlo como hexadecimal RGB en primer lugar, pero actualicé la solución aquí con algo similar a esto:fuente
leave_type_color
columna numérica?Comience considerando lo que quiere tener como columnas, y eso es básicamente "Semana 1 Día 1 (Sol)", "Semana 1 Día 2 (lunes)", hasta "Semana 6 Día 7 (sábado)". Esencialmente, día 1-42. El 1 de enero es entonces "Semana 1 Día 2" de enero. Llamaré a este WeekPlusDay por ahora.
Para averiguar dónde comienza cada uno, solo considere la parte del día de la semana de la fecha.
Su conjunto de datos solo tiene que incluir ese valor "WeekPlusDay", y usted muestra el DayOfMonth.
fuente