Bonjour à Tous,
Je dispose des tables ou vues suivantes :
- Base : ma table de données, non modifiable, issue d'un autre logiciel
- ReqSejours : une vue : sélectionne à partir de Base l'identifiant client unique (ID) et les dates de début (Debut) et de fin (Fin) de leur séjour
- Calendrier : une vue : comporte une série de date (Jours) (en pratique : série chronologique complète du 1er/01/2011 au 26/10/2013)
L'objectif :
Obtenir une vue comportant le nombre de séjours "en cours" pour chaque date du Calendrier.
Ma proposition :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 /* Récupérer le nombre de séjours pour lesquels la date testée est comprise entre les dates de début et de fin du séjour */ SELECT Calendrier.Jours, Count(ReqSejours.ID) AS NbSejours FROM ReqSejours, Calendrier WHERE (ReqSejours.Debut <= Calendrier.Jours) AND (ReqSejours.Fin >= Calendrier.Jours) GROUP BY Calendrier.Jours ORDER BY Calendrier.Jours;
Mon problème :
Sur 1029 lignes de résultat, j'ai 28 lignes avec des résultats aberrants (valeurs doubles de la valeur réelle); que j'ai contrôlé avec la requête manuelle suivante, qui, elle, donne des résultats corrects :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 PARAMETERS [date] DateTime; SELECT Count(ReqSejours.ID) AS NbSejours FROM ReqSejours WHERE (ReqSejours.Debut <= [date]) AND (ReqSejours.Fin >= [date]);
Ma Question :
Étant béotien en SQL, quelqu'un peut-il m'expliquer pourquoi j'obtiens ces résultats discordants; et comment corriger mon code ? sachant qu'il n'y a pas de trous ni de valeur null dans la vue ReqSejours.
Merci d'avance.
Partager