Access 2003/ requete conditionnellle

Résolu/Fermé
TOUPOU96 Messages postés 49 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 9 juin 2011 - 26 juin 2008 à 10:51
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 - 8 juil. 2008 à 15:10
Bonjour,
je souhaite avoir de l'aide pour resoudre ce problème: j' ai fait une requete qui me donne le nombre de jours passés par un visiteur par mois dans un hebergement, sachant qu'il peut arrivé dans le mois courant et repartir, qu'il peut etre là depuis un ou plusieurs mois aussi. En fait, je voudrais à partir de la date d' arrivée et celle de depart, savoir le nombre de jours que le visiteur aura passé chez moi pour le mois en cours. J'ai une table avec les informations sur le visiteur et une autre sur ses mouvements dans ma structure.
J'ai besoin de vos éclairages, car je bloque sur la requete à faire...

9 réponses

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
26 juin 2008 à 12:25
Bonjour,

Peux-tu copier/coller la définition de tes deux tables stp ? Cela sera plus facile pour trouver une solution à ton problème.

A plus
0
TOUPOU96 Messages postés 49 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 9 juin 2011 4
26 juin 2008 à 15:32
Re Christounet,
je ne comprends pas très bien ce que tu entends par la definition de mes tables, sinon voilà :
Tables:
CLIENTS(Nom, prenom, Date_naissance, Ville_origine, Profession)
SEJOUR(Prénom, Sexe, Date-Entree, Date_Sortie, Sejour_Mensuel, Sejour_Total)

La requete construite doit me lister les nom, prenom, sexe, Date_Naissance, Sejour_Mensuel, Sejour_Total
et je voudrais calculer le nombre de jours passés par une personne dans le mois en cours, Sejour_Mensuel.

Merci Chris et à bientot, j'espère
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
26 juin 2008 à 16:19
Bonjour,
Encore trois petites questions
1°) Comment vais-tu le lien entre ta table séjour et clients si tu n'as que le prénom, je suppose que plusieurs clients peuvent avoir le même prénom
2°) Dans ta table séjour, est ce que la date de sortie est toujours remplie ?
3°) Dans ta table séjour, les colonnes Sejour_Mensuel et Sejour_Total sont-elles remplies ou bien veux tu les calculer avec ta requête pour pouvoir les mettre à jour ?
Dès que j'aurais les réponses, je ferai de mon mieux pour te proposer une solution
A plus
0
TOUPOU96 Messages postés 49 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 9 juin 2011 4
26 juin 2008 à 17:12
Christounet,
pour repondre à tes questions,

- la table CLIENTS a une clé primaire et celle ci est la clé étrangère de la table séjour. D'autre part, j' ai un formulaire qui peuple la table CLIENTS et un sous formulaire imbriqué dedans qui peuple la table séjour. Je souhaite donc que ma requête calcule et remplisse les champs Séjour_mensuel et Séjour_total.

- Le champ Date_Sortie peut être nul lorsque mon client est encore hébergé à la fin du mois et dans ce cas le sejour mensuel compte les jours jusqu'à la fin du mois considéré.
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
26 juin 2008 à 17:49
Toupou96,

Ok, merci pour tes réponses, je vais créer les mêmes tables sur mon ordinateur et essayer de trouver la requête sql qui correspond à ta demande. Je suis malheureusement demain en congé, donc je ne pourrais te répondre que Lundi, si tu peux attendre jusque là.
A plus
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
30 juin 2008 à 17:30
Bonjour Toupou96,

Comme prévu, voici un code d'une requête qui devrait faire ce que tu veux
SELECT Clients.Nom, Clients.Prénom, Sejour.Sexe, Clients.Date_naissance, Sejour.Date_entree, Sejour.Date_sortie, iif(DatePart('M',Sejour.Date_Sortie) < DatePart('M',now()),0,iif(Sejour.Date_Sortie is not NULL,
iif(DatePart('M',Sejour.Date_entree) = DatePart('M',now()),datediff('d',Sejour.Date_entree,Sejour.Date_sortie),
datediff('d',format(DatePart('yyyy',now()) & "/" & DatePart('M',now()) & "/01" , "yyyy/mm/dd"), Sejour.Date_sortie)),
iif(DatePart('M',Sejour.Date_entree) = DatePart('M',now()),datediff('d',Sejour.Date_entree,now()),
datediff('d',format(DatePart('yyyy',now()) & "/" & DatePart('M',now()) & "/01" , "yyyy/mm/dd"), now())))) AS Sejour_Mensuel,
iif(Sejour.Date_sortie is NULL,datediff('d',Sejour.Date_entree,now()),
datediff('d',Sejour.Date_entree,Sejour.Date_sortie)) AS Sejour_Total
FROM Clients INNER JOIN Sejour ON Clients.ClientId = Sejour.ClientId;

J'ai effectué la jointure sur la colonne ClientId (dans ma table CLIENTS c'est un numéro unique qui est reprise comme clé externe dans la table SEJOUR.
Explication de la colonne Sejour_Mensuel
Si le mois de Sortie < mois en cours
alors 0
sinon si la date de sortie est remplie
        alors si le mois d'entrée = mois en cours
               alors nombre de jours entre date entrée et date sortie
               sinon nombre de jours entre premier du mois et date sortie
        sinon si mois d'entrée = mois en cours
                alors nombre de jours entre date entrée et aujourd'hui
                sinon nombre de jours entre premier du mois et aujourd'hui 

Explication de la colonne Sejour_Total
Si date est sortie est NULL
alors nombre de jours entre date entrée et aujourd'hui
sinon nombre de jours entre date entrée et date sortie


Tiens moi au courant, merci
0
TOUPOU96 Messages postés 49 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 9 juin 2011 4
30 juin 2008 à 20:50
Bonsoir Christounet,
Merci beaucoup pour ton aide....aujourd'hui, j'ai encore essayé et jusqu'à maintenant je n'ai pu obtenir quelque chose de satisfaisant, alors j'essaye ce code et te tiens au courant...
Bonne soirée, merci et à bientot.
0
TOUPOU96 Messages postés 49 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 9 juin 2011 4
2 juil. 2008 à 08:12
Bonjour Christounet,
si j'ai pas fait signe hier, c'est que je suis encore en plein taf " il faut courir tous les jours....", voilà j'ai essayé ton code cette nuit et je voudrais savoir s'il marche chez toi car pour moi, il y' a des bugs et j'essaye encore de voir. Par exemple je ne comprends pas, après le premier IF:
iif(DatePart('M',Sejour.Date_Sortie)) < DatePart('M',now()),0,iif(Sejour.Date_Sortie is not NULL,
il sert à quoi le 0 entre eux?

Merci,
Bonne journée et à bientot
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
2 juil. 2008 à 11:01
Bonjour Toupou96,

Oui, le code fonctionne chez moi, j'ai crée deux tables (Clients et Sejour) avec quelques donnée, tu trouveras une image de mes données et résultat ici, ici et ici.
Concernant ta 2ème question, l'instruction IIF à toujours trois arguments, le premier est la condition à testé, le second est le résultat quand la condition est vraie, et le troisième quand la condition est fausse. Dans le cas du premier, si le mois de la date de sortie est plus petit que le mois en cours, le sejour_mensuel est mis à zéro.
N'hésite pas si tu as d'autres questions.
A plus
0
TOUPOU96 Messages postés 49 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 9 juin 2011 4
2 juil. 2008 à 13:56
MERCI CHRISTOUNET,
Dans ta requete, quel est le moment du calcul, Now() implique la date actuel car en nous plaçant debut du mois de juillet, le 02 juillet 2008 par exemple, celà marche très bien. Est il possible de sortir une requete avec les personnes présentes au mois de fevrier 2008?
Je vais d'abord revoir mon code car jusqu'à maintenet, je n'obtiens pas toujours le resultat attendu. Je reprends tout et je te dirai. Merci et à bientot.
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
2 juil. 2008 à 14:18
Bonjour Toupou96,

Pour trouver toutes les personnes présentes en Février 2008, la requête devrait être la suivante
SELECT Clients.Nom, Clients.Prénom, Sejours.Date_entree, Sejours.Date_sortie
FROM Clients INNER JOIN Sejours ON Clients.ClientId = Sejours.ClientId
WHERE Sejours.Date_entree<=#2/29/2008#
    AND (Sejours.Date_sortie>=#2/1/2008# or Sejours.Date_sortie is NULL);

A plus
0
TOUPOU96 Messages postés 49 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 9 juin 2011 4
3 juil. 2008 à 16:17
Bonjour Christounet,
oui, je sais celà et je voulais en fait poser la question au cas ou je voudrais avoir les personnes présentes en Fevirier 2008, je conserve donc le premier code auquel j' ajoute la clause WHERE...... Ai je bien compris?
Pour le moment, le code est passé, mais je petits soucis pour le debogage. Je te tiens au courant et merci.
A bientot.
0
TOUPOU96 Messages postés 49 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 9 juin 2011 4
8 juil. 2008 à 14:57
Salut Christounet,
Après beaucoup de prise de tete et grace à tes requetes, je suis venu à bout de mon problème te je te remercie vivement.
Tout est ok.

A bientot. TOUPOU96
0
TOUPOU96 Messages postés 49 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 9 juin 2011 4
8 juil. 2008 à 14:59
MERCI, LE PROBLEME EST ENFIN SOLUTIONNÉ...!
0
TOUPOU96 Messages postés 49 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 9 juin 2011 4
8 juil. 2008 à 15:02
MERCI A TOUS ET A CCM
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 389
8 juil. 2008 à 15:10
Salut Toupou96,

Heureux que ton problème soit résolu.

A plus
0