Je suis nouveau dans la programmation et les bases de données et je vous serais reconnaissant de m'aider dans le scénario suivant.
J'utilise PHP avec SQL Server. Je construis un système de présence des employés et je voudrais créer un tableau (pivot) avec des mois comme lignes et tous les jours de la semaine comme colonnes (pour une année spécifique). Les valeurs dans les cellules seront le nombre de jours (1, 2, 3 ... 31).
La couleur d'arrière-plan de la cellule (existe déjà en tant que colonne de tableau) déclare le type de congé des employés. Le tableau présente les colonnes suivantes: employee_id, leave_date, leave_type, leave_type_color
.
Je veux obtenir un résultat comme ci-dessous:
Je vous remercie.
sql-server
php
pivot
Mike T
la source
la source
Réponses:
La partie la plus complexe de cela consiste simplement à créer le calendrier dans ce format. Faire pivoter et l'entourer de HTML est assez facile. Tout d'abord, commençons par cela, votre table des employés avec les dates de congé.
leave_type
ne semblait pas pertinent pour le problème en question.La procédure que j'ai trouvée ressemble à ceci (et avertissement: cela suppose
@@DATEFIRST = 7
):Résultats de cet appel:
Regardez comme ça (je me suis arrêté à la colonne du 7ème jour):
Vous devrez ajouter le
<table>
/</table>
wrapper vous-même, mais voici à quoi ressemble la sortie lorsqu'elle est placée entre ceux-ci et enregistrée au format HTML (et bien sûr, vous pouvez encore l'améliorer avec CSS):Lorsque le congé tombe un week-end, la couleur du congé l'emporte sur la couleur du week-end, mais cela est facile à ajuster. Change ça:
Pour ça:
Pour convertir une couleur au format décimal (comme
65280
) en son équivalent RVB (00FF00
), vous devez faire un tas de manipulation. J'envisagerais de le stocker en tant qu'hexagone RVB en premier lieu, mais j'ai mis à jour la solution ici avec quelque chose de similaire à ceci:la source
leave_type_color
colonne est-elle numérique?Commencez par considérer ce que vous voulez avoir comme colonnes, et c'est essentiellement "Semaine 1 Jour 1 (Dim)", "Semaine 1 Jour 2 (Lun)", jusqu'à "Semaine 6 Jour 7 (Sam)". Essentiellement, Jour 1-42. Le 1er janvier est alors «Semaine 1 Jour 2» de janvier. Je vais appeler ce WeekPlusDay pour l'instant.
Pour déterminer où commence chacun, considérez simplement la partie du jour de la semaine.
Votre jeu de données n'a alors qu'à inclure cette valeur «WeekPlusDay», et vous affichez DayOfMonth.
la source