Bonjour,

Dans le cadre de mon travail j'ai créé une table Calendrier qui décompose chaque date en année mois jours (et semaine aussi, voir ci dessous). Une ligne par jour de 2009 à 2020.

Nom : calendrier basique.JPG
Affichages : 483
Taille : 32,8 Ko

Jusque là, rien de méchant.


J'ai rajouté les colonnes Mois-3, Mois-2, Mois-1, Mois-M, Mois+1, Mois+2, Mois+3 (même chose avec les années, les semaines et les jours), toutes de types BIT, remplies avec des zéro.

Les choses de corsent quand je souhaite UPDATE lesdites colonnes, en mettant la valeur du champ à 1 si, effectivement, la date de la ligne satisfait la condition de la colonne. En effet, mon but est de comparer une date du calendrier à la valeur de GETDATE() :
Si la date de la table Calendrier est 1er mai 2014, elle se trouve dans le même mois que celle de GETDATE() et la valeur de Mois-M est à 1, les 6 autres valeurs (relatives aux mois) sont donc à 0.
Si la date de la table Calendrier est le 30 avril 2014, elle ne se trouve pas dans le même mois que celle de GETDATE() et la valeur de Mois-M est à 0 mais celle de Mois-1 est à 1, les 5 autres valeurs sont donc à 0.
Si la date de la table Calendrier est 2 mai 2010, elle se trouve dans le même mois que celle de GETDATE() mais l'année est différente, la valeur de Mois-M devra être à 0, les 6 autres valeurs aussi.

J'ai peur de ne pas être très clair, voici une petite maquette de ce que je souhaite obtenir :
Nom : objectif.JPG
Affichages : 377
Taille : 32,4 Ko


Je compte exécuter quotidiennement une procédure mettant à jour tous ces champs booléens.
Exemple de ce que je fais pour la colonne Mois N+1 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
UPDATE [CALENDRIER]
SET [Cd_Mois_N+1] = 1
where [Cd_Mois]=month(getdate())+1 and [Cd_Annee]=year(getdate())
Le problème (enfin) :

Ce code marche parfaitement aujourd'hui car nous sommes en milieu d'année mais si la procédure s'exécute en février 2015, les dates de décembre 2014 n'auront pas leur case Mois N-2 cochée.

Je pourrais tester avec des CASE toutes les possibilités mais étant donné que je devrai faire de même avec les jours et les semaines, la tâche s'annonce plutôt laborieuse donc je me dis que je manque surement d'astuce..

Je m'en remets donc à votre expérience pour trouver une solution plus élégante !

N'hésitez pas à me demander de compléter mon explication si besoin. Merci par avance.