Requete sur un intervalle de Dates

Fermé
Ash_86 Messages postés 3 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 23 avril 2013 - 19 avril 2013 à 11:22
 tessel75 - 23 avril 2013 à 23:03
Bonjour à tous,

Je suis à la recherche d'une solution pour faire une requête qui en fonction des dates retourne une période de vacances si il y en a une, ou rien si la date ne correspond pas à une date de vacances.

Mes tables sont les suivantes:

T_jour: Date_Jour (ex: 02/03/2013), Ventes_Jour (10.000)
T_vacances: Nom_Vac (ex Vac hiver 2013) Date_Debut (ex: 05/03/2013) Date_fin (10/03/2013)


En faisant une requête:

Between [T_Vacances].[Date_debut] And [T_Vacances].[Date_fin]

Elle n'affiche que les dates qui correspondent à une période de vacances, alors que je veux aussi voir les dates sans périodes de vacances.


Si j'essaie de mettre dans "or" Not Between [T_Vacances].[Date_debut] And [T_Vacances].[Date_fin]. la requête ne fonctionne pas.


J'ai essayé de changer les relations entre les tables, mais aucune ne fait fonctionner la requête comme je le veux;

Si quelqu'un peux m'aider, c'est très gentil, et si il faut que je donne plus de détail, dites moi!

Merci

3 réponses

Bonsoir,
Ta question n'est vraiment pas claire. C'est un "art" un peu difficile; la seule chose importante n'est pas les détails mais ce que peuvent comprendre tes interlocuteurs. Or nous (l'absence de réponse témoigne de la perplexité où se sont trouvés tous ceux qui ont ouvert ton message) ne comprenons pas comment est construite ta (tes) table et moins encore ce que tu veux en extraire, ni selon quels critères.
Des périodes de vacances, et entre telle et telle dates, d'accord, mais comment ces périodes sont-elles enregistrées? Tu nous indiques le critère ("entre ... et ..."): très bien mais comme tu ne dis pas dans quelle requête s'intègre ce critère, nous sommes bien en peine de dire ce qui accroche et comment le corriger.
Encore un effort. SVP
0
Ash_86 Messages postés 3 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 23 avril 2013
22 avril 2013 à 16:08
Merci pour ta réponse,

j'ai fait un schéma qui sera surement plus clair:

https://www.dropbox.com/s/ctvg48v9s2rmahs/Req_Access.jpg

J'ai donc deux tables,

Une qui contient les dates avec les nombre de ventes associées et une autre qui contient le nom de la période de vacances et la date de début et la date de fin des vacances (les périodes sont enregistrées avec une date de début dans une colonne et une date de fin dans une autre colonne).

Dans mon résultat de requête, je veux qu'il m'affiche toutes les dates de ventes, et dans une nouvelle colonne, je veux qu'il renvoie le nom de la période de vacances si la date est prise dans l'intervalle ou rien si la date ne correspond à aucune période de vacances.

La requête que j'avais commencé à faire pour trouver une solution c'est une requête Select:

SELECT T_Jour.Date_Jour, T_Jour.Ventes, T_Vacances.Nom_vacances
FROM T_Jour, T_Vacances
WHERE (((T_Ventes.Date_Jour) Between [T_Vacances.Date_Debut] And [T_Vacances.Date_fin]));


J'espère que j'ai été plus clair cette fois-ci,


Merci beaucoup,
0
Bonsoir,
Merci pour tes efforts, ta question est bien plus compréhensible pour qui veut bien s'en donner la peine.
Malheureusement, je ne peux pas t'en donner une solution simple. Je pourrais peut-être m'y risquer mais sans être certain de la validité. C'est le genre de truc où les tables n'ont pas de liens évidents à établir malgré l'apparente simplicité des données.
Pour ce que j'envisagerais, le résultat serait que j'établirais une requête (R1) avec les 2 tables adjacentes mais sans liaison, d'où une série de toutes les combinaisons de T_Jours et T_Vacances, soit n*m lignes, et ensuite une autre requête (R2) dont R1 serait la source, dont j'écrêterais les lignes utiles.
C'est le mieux que je puisse te dire.
En espérant que d'autres plus compétents puissent t'être d'un plus grand secours.
Bonne suite
0
Ash_86 Messages postés 3 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 23 avril 2013
23 avril 2013 à 15:17
Merci pour ta réponse

quelqu'un m'a conseillé de faire un IIF:

Alors j'ai le code suivant dans la partie SQL:

SELECT T_Ventes.Date_Jour, T_Ventes.Vol_Ventes, T_Vacances.Nom_vacances
FROM T_Ventes, T_Vacances
WHERE (((T_Vacances.Nom_vacances)=IIf([T_Ventes.Date_Jour] Between [T_vacances.Date_debut] And [T_vacances.Date_fin],[T_Vacances].[Nom_vacances],'pas de vacances')));


Mais il ne me retourne que les lignes avec des vacances et aucune ligne "Pas de vacances"

Je suis toujours coincé,

Pour ta solution R1 puis R2: comment faire quand il aura fait R1 pour sélectionner dans R2 lignes qui sont correctes, car dans R1 il aura associé toutes les dates avec toutes les périodes de vacances donc il y aura des erreurs, non?

Merci pour ton aide
0
Bonsoir, Je répondrai en 2 étapes pour clarifier les choses.
1) Ta requête. Tu poses comme critère de sélection:
WHERE (((T_Vacances.Nom_vacances)=IIf([T_Ventes.Date_Jour] Between [T_vacances.Date_debut] And [T_vacances.Date_fin],[T_Vacances].[Nom_vacances],'pas de vacances')))

et tu te plains que cette requête ne te ramène que les ventes "avec des vacances et aucune ligne "Pas de vacances" ".
Mais cela est très normal; il suffit de bien regarder la signification du critère.
La fonction iif() doit se comprendre: si X vrai alors A sinon B
càd pour ton exemple: si (DateJour entre DateDebut et dateFin) alors (NomVacances) sinon (HorsVacances). Mais cette expression se rapporte à ton critère de sélection NomVacances
Càd qu'il faut comprendre ton critère comme Critère = "NomVacances" ou bien "HorsVacances"
Mais comme la valeur "HorsVacances" n'existe pas dans la table T_vacances et qu'il n'y a pas de date encadrant cette période, le critère ne ramène rien.

2) Tu dis;"comment faire quand il aura fait R1 pour sélectionner dans R2 lignes qui sont correctes, car dans R1 il aura associé toutes les dates avec toutes les périodes de vacances donc il y aura des erreurs "
C'est exactement cela, comme dans R1 il y aurait de tout, il faudrait que R2 élimine les lignes "erronées"

3) Enfin après réflexion, il me semble qu'en réalité ce dont tu as besoin est une requête Mise à Jour ( en SQL Insert into ) dans T_Ventes sur un nouveau champ à créer à côté des champs "DateVente" avec les termes "Vacances" ou "HorsVacances", cela grâce à ta fonction iif() ou bien encore à l'aide de 2 requêtes successives la 1ére pour les ventes "Vacances" et l'autres "HorsVacances"
0