Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/01/2011, 21h33   #1
Invité de passage
 
Lucie
Inscription : juin 2009
Messages : 10
Détails du profil
Informations personnelles :
Nom : Lucie

Informations forums :
Inscription : juin 2009
Messages : 10
Points : 2
Points : 2
Par défaut Faire ressortir une valeur texte selon une date conditionnelle

Bonjour,

J'ai besoin de faire ressortir une valeur texte selon la sélection d'une date comprise entre une
date de début et de fin. Pour illustrer mon besoin voici la table des périodes:

Période Début Fin

P-1-2010 1 avril 2010 24 avril 2010
P-2-2010 25 avril 2010 22 mai 2010
P-3-2010 23 mai 2010 19 juin 2010
P-4-2010 20 juin 2010 17 juillet 2010
P-5-2010 18 juillet 2010 14 août 2010
P-6-2010 15 août 2010 11 septembre 2010
P-7-2010 12 septembre 2010 9 octobre 2010
P-8-2010 10 octobre 2010 6 novembre 2010
P-9-2010 7 novembre 2010 4 décembre 2010
P-10-2011 5 décembre 2010 1 janvier 2011
P-11-2011 2 janvier 2011 29 janvier 2011
P-12-2011 30 janvier 2011 26 février 2011
P-13-2011 27 février 2011 31 mars 2011

(ma table comprend également des données pour l'année 2009-2010)

Bref, je voudrais que lorsqu'une date sélectionnée est comprise entre le début et la fin, qu'il en résulte le champ intitulé Période.

Faut dire que j'aurai à faire une requête également sur le champ Période afin d'en extraire d'autres données relationnelles.

J'apprécie grandement votre aide.
Weiyin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 21h53   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonsoir Weiyin,

Si j'ai bien tout compris :
Code sql :
1
2
3
SELECT Periode
FROM TablePeriode
WHERE TaDatePourLaquelleTrouverPeriode BETWEEN debut AND fin
devrait te donner la période correspondante à une date précise.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 18/01/2011, 17h08   #3
Invité de passage
 
Lucie
Inscription : juin 2009
Messages : 10
Détails du profil
Informations personnelles :
Nom : Lucie

Informations forums :
Inscription : juin 2009
Messages : 10
Points : 2
Points : 2
Par défaut Faire ressortir une valeur texte selon une date conditionnelle

Bonjour,

Suite à mon dernier message, est-ce qu'une "requête mise à jour" serait plus appropriée? Je m'explique:

À partir de la tblInfoPatient j'aurai à saisir au cours du temps, une date dans le champ DateRef ainsi que dans le champ DatePEC.

J'ai crée une tblPeriodes qui référencie les périodes grâce à une DateDebut et une DateFin.

J'aimerais être en mesure de pouvoir faire ressortir une liste des informations en interrogeant uniquement une période donnée (ex. période P-1-2010 - qui représenterait toutes les dates saisies entre le 1er avril 2010 et le 24 avril 2010 soit dans le champ DateRef ou DatePEC)

Je continue de chercher la façon de faire et si quelqu'un pouvait jeter un coup d'oeil à ma base que je joins en annexe, j'apprécierais grandement

http://cjoint.com/?0bsqYttIdS
Weiyin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 17h49   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Weiyin,

Remettons, d'abord, ta base "à plat" : j'y vois pas mal d'anomalies.

tblCliniques :
C'est IdClinique qui doit être la clé primaire, pas NomClinique.

tblCSSSautre :
IdCSSSautre doit être en clé primaire.

tblInfoPatient :
IdPatient doit être en clé primaire.

tblMedecins :
Supprimer N°, modifier IdMedecin en NuméroAuto et mettre IdMedecin en clé primaire.

tblProvenance :
C'est IDProvenance qui doit être la clé primaire, pas Provenance.

Recréer les relations en fonction des remarques précédentes.

Questions :
Qu'est censée représenter la table tblCSSSautre ?
Peux-tu ce que représente tblPeriodes, tblPeriodePEC, tblPeriodeRef, tblPriorite et tblProvenance ?

Ensuite, nous pourrons essayer de comprendre ce que tu veux faire.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 20h50   #5
Invité de passage
 
Lucie
Inscription : juin 2009
Messages : 10
Détails du profil
Informations personnelles :
Nom : Lucie

Informations forums :
Inscription : juin 2009
Messages : 10
Points : 2
Points : 2
Bonjour Richard,

Tout d'abord merci d'avoir pris de votre temps pour regarder ma bd.

Tel que vous me suggériez, j'ai replacé les clés primaires sur les libellés ID* mais en conséquence il me devient impossible d'afficher une feuille de sous-données à cause des relations basées sur les clés primaires en format de numérotation automatique.

Les "tblCliniques", tblCSSS autres", "tblMédecins", "tblProvenance", et "tblPriorité" ont été crées dans un premier temps pour être utilisées en listes déroulantes sur la feuille de données "tblInfoPatient".

La "tblPeriodes" représente les périodes financière dont la date est comprise entre une DateDebut et une DateFin.

J'aimerais que les dates qui seront entrées dans les champs "DateReference" ainsi que DatePEC (qui signifie pour moi, une date de prise en charge) puissent être utilisées en faisant une requête à savoir: quels sont les patients qui ont été référés en "P-1-2010", "P-2-2010" etc, et quels sont les patients pris en charge (PEC) en "P-1-2010, "P-2-2010" etc...

Pour les tables "tblPeriodeRef" et "tblPeriodePEC".... je ne savais pas encore quoi en faire; elles n'ont peut-être aucune utilité.

Serait-ce possible de faire apparaître le nom de la période par une requête selon la date saisie dans "DateReference" et "DatePEC".

Merci encore et encore
Weiyin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 10h19   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Weiyin,

Citation:
... à cause des relations basées sur les clés primaires en format de numérotation automatique.
==> Ce diagnostic n'est pas le bon : en effet, cette manipulation est effectuée régulièrement sans problème. Il faudrait que tu re-postes ta base modifiée : il doit subsister quelques anomalies.


Citation:
J'aimerais que les dates qui seront entrées dans les champs "DateReference" ainsi que DatePEC (qui signifie pour moi, une date de prise en charge) puissent être utilisées en faisant une requête à savoir: quels sont les patients qui ont été référés en "P-1-2010", "P-2-2010" etc, et quels sont les patients pris en charge (PEC) en "P-1-2010, "P-2-2010" etc...
==> La requête indiquée précédemment devrait te donner le résultat souhaité, à savoir :
Code sql :
1
2
3
SELECT Periode
FROM tblPeriodePEC
WHERE DateReference BETWEEN DebutPer AND FinPer
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 15h08   #7
Invité de passage
 
Lucie
Inscription : juin 2009
Messages : 10
Détails du profil
Informations personnelles :
Nom : Lucie

Informations forums :
Inscription : juin 2009
Messages : 10
Points : 2
Points : 2
Bonjour Richard,

J'ai modifié les clés primaires tel que vous me l'aviez demandé - mais je me questionne en ce qui concerne la tblCliniques et la tblMedecins car la relation devrait-elle pas être "un à plusieurs" - la clinique ayant plusieurs médecins à son emploi.

La requête que vous m'avez suggéré fonctionne mais ne me donne pas le résultat que je veux utiliser ultérieurement - je m'explique:

Je souhaite donc pouvoir illustrer : la liste des patients référés en "P-1-2010", "P-2-2010" etc, et quels sont les patients pris en charge (PEC) en "P-1-2010, "P-2-2010" etc... en interrogeant uniquement la période et non pour une date spécifique.

Je joins ma base selon vos recommandations.

Merci

http://cjoint.com/?0buphgIYu8r
Weiyin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 17h37   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Weiyin,

Les relations entre les tables s'effectuent en faisant glisser le champ d'origine vers le champ de destination.

Par exemple, tu fais pointer tblCliniques vers tblInfoPatient avec IdClinique vers IdPatient : cela veut dire que tu veux faire correspondre un numéro de clinique avec un numéro de patient...


D'autre part, quand tu dis :
Citation:
mais je me questionne en ce qui concerne la tblCliniques et la tblMedecins car la relation devrait-elle pas être "un à plusieurs" - la clinique ayant plusieurs médecins à son emploi.
c'est tout à fait exact !

Pour obtenir cela, il faut les tables suivantes :
tblCliniques :
IdClinique (clé primaire, numéro auto)
NomClinique
...
==> ta table est OK.

tblMedecins :
IdMedecin (clé primaire, numéro auto)
NomMedecin (et non pas NomClinique...)
IdClinique
...
==> copier/coller intempestif pour le nom du champ ;
==> ajout de l'IdClinique.

Relation :
tblCliniques 1----n tblMedecins, via IdClinique.

Cela, en supposant, qu'un médecin ne peut pas être dans plusieurs cliniques : il faudrait que tu confirmes/infirmes.

Fort de cet exemple, peut-être pourrais-tu revoir l'ensemble de tes tables avec les bonnes relations reliant les bons champs entre eux.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 19h35   #9
Invité de passage
 
Lucie
Inscription : juin 2009
Messages : 10
Détails du profil
Informations personnelles :
Nom : Lucie

Informations forums :
Inscription : juin 2009
Messages : 10
Points : 2
Points : 2
Bonjour Richard,

J'ai fait ce que vous suggériez, sauf que lorsque je retourne dans la tblCliniques, la sous-feuille de données demande une valeur de paramètre NomMedecin....

j'obtenais le résultat souhaité lorsque la clé était sur NomClinique dans la tblMedecins.

Je confirme qu'un médecin n'est que dans une seule clinique, et qu'une clinique a plusieurs médecins.


Dans un premier temps, j'aimerais me concentrer sur la façon d'obtenir le résultat concernant mes période financières, pouvez vous regarder seulement les tables concernant les périodes, après je me concentrerai sur les relations et les clés des différentes tables :

Je souhaiterais donc pouvoir illustrer : la liste des patients référés en "P-1-2010", "P-2-2010" etc, et quels sont les patients pris en charge (PEC) en "P-1-2010, "P-2-2010" etc... en interrogeant uniquement la <souligne>période correspondante à la date</souligne> et non pour une date spécifique.

Je vous remercie encore de votre grande gentillesse.
Weiyin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 21h30   #10
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Sans des tables correctement construites avec les relations adéquates, tu ne pourras pas t'en sortir.

Citation:
J'ai fait ce que vous suggériez, sauf que lorsque je retourne dans la tblCliniques, la sous-feuille de données demande une valeur de paramètre NomMedecin....
==> c'est normal : il faut refaire les formulaires avec les nouvelles tables et les nouvelles relations.


Sinon, si tu veux retrouver une période à partir d'une date, comme il me semble l'avoir compris, je t'ai suggéré une requête :
Code sql :
1
2
3
SELECT Periode
FROM tblPeriodePEC
WHERE DateReference BETWEEN DebutPer AND FinPer
==> à adapter.


En tout état de cause, il faudrait "remettre à plat" les tables et les relations avant de faire quoi que ce soit.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/01/2011, 20h31   #11
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

1) Je te suggère vivement de suivre les conseils de Richard_35, concernant la structure de tes tables,
et leurs relations entre elles.

2) Pour récupérer la période correspondant à une date.
Par exemple pour récupérer la période de la table tblPeriodes à la date DateReference de la table tblInfoPatient.
Code :
1
2
3
4
5
6
SELECT tblInfoPatient.IdPatient, tblInfoPatient.DateReference, 
  DLookUp("IdPeriode","tblPeriodes",Format([tblInfoPatient].[DateReference],"\#mm\/dd\/yyyy\#") & " Between [DebutPer] And [FinPer]") AS ClePeriode, 
  DLookUp("Periode","tblPeriodes","[IdPeriode] = " & [ClePeriode]) AS NomPeriode, 
  DLookUp("DebutPer","tblPeriodes","[IdPeriode] = " & [ClePeriode]) AS DebutPer, 
  DLookUp("FinPer","tblPeriodes","[IdPeriode] = " & [ClePeriode]) AS FinPer
FROM tblInfoPatient;
Le premier Dlookup (RechDom en français) ramène la valeur de la clé (IdPeriode) de la période trouvée.
A partir de cette clé, à laquelle on donne l'alias ClePeriode, les autres Dlookups ramènent le nom et les dates de début et fin.

3) Pour récupérer les patients pris en charge par période
Code :
1
2
3
SELECT tblPeriodes.IdPeriode, tblPeriodes.Periode, tblPeriodes.DebutPer, tblPeriodes.FinPer, tblInfoPatient.IdPatient, tblInfoPatient.DatePEC
FROM tblPeriodes LEFT JOIN tblInfoPatient ON tblInfoPatient.DatePEC >= tblPeriodes.DebutPer And tblInfoPatient.DatePEC <= tblPeriodes.FinPer
ORDER BY tblPeriodes.DebutPer;
Remarque : cette requête ne peut pas être affichée en mode graphique à cause de la jointure un peu particulière.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h11.


 
 
 
 
Partenaires

Hébergement Web