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 26/07/2011, 15h30   #1
Invité de passage
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 1
Points : 1
Par défaut Recherche par rapport à 2 critères.

Bonjour à tous,

Je souhaiterai faire sous Access 2010, une requête avec une recherche par rapport à plusieurs critères. Quelq'un aurait-il une réponse à ce probleme?

La table des valeurs

Code :
1
2
3
4
5
6
DATE    CODE    DESIGNAT    PRIX
01/02/2011    codeA    articleA    789,45
07/02/2011    codeA    articleA    750,02
11/02/2011    codeA    articleA    724,99
01/05/2011    codeA    articleA    773,25
01/06/2011    codeA    articleA    820,03
La requête avec les résultat. La recherche se fera au niveau du prix par rapport au code de l'article et de la date la plus proche inferieure ou égale à la date de facturation.

Code :
1
2
3
4
5
DateFacturation    CodeArticle    NOMARTICLE    PRIX
05/02/2011    codeA    articleA    789,45
15/02/2011    codeA    articleA    724,99
01/05/2011    codeA    articleA    773,25
18/06/2011    codeA    articleA    820,03
Merci pour votre aide.
patougaffou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 15h36   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
C'est un peu vague comme demande.

Souhaites-tu donner à l'utilisateur final le choix ?

Est-ce un truc que tu va faire une seule fois ?

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 16h04   #3
Invité de passage
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 1
Points : 1
En fait il n'y a pas de choix c'est tout simplement une requete qui va chercher les prix de la premiere table.
Si la date de facturation est le 15/02/2011, il va chercher pour le code 'codeA', la date la plus proche avant la date de facturation, soit le 11/02/2011. Donc le prix affiché est 724,99.

Je ne sais pas si c'est assez clair comme explication.
patougaffou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 18h49   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
OK, ouvre l'éditeur de requête d'Access, ajoute la table voulu, choisi les champs qui t'intéresse et glisse les dans les colonnes en dessous.

Une fois cela fait, met les conditions que tu cherches dans la ligne des critères.

en SQL cela pourrait donner

Code sql :
SELECT [taTable].[TonChampDate], [taTable].[TonChampPrix] FROM [TaTable] WHERE [taTable].[TonChampSate]=dateserial(2011, 02, 15) AND [taTable].[TonChampPrix]=724.99;

J'ai utilisé DateSerial() à la place d'une date pour éviter les ambiguités de format de date. Quand Access voit 02/01/2011 il peut lire 2 janvier 2011 ou 1er février 2011 avec DateSerial(Annee, Mois, Jour) il n'y a aucun doute possible.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 10h52   #5
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Bonjour,

si j’ai bien compris et en partant des tables [TableFacturation] (DateFacturation, CodeArticle) et [TableValeurs] (Date, CodeArt, Prix).

La requête ci-dessous va retourner les lignes :
Code :
1
2
3
4
5
CodeArticle	DateFacturation	     DatePrix
   A	        05/02/2011	     01/02/2011
   A	        15/02/2011	     11/02/2011
   A	        01/05/2011	     01/05/2011
   A	        18/06/2011	     01/06/2011
Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
SELECT u.codearticle, 
       u.datefacturation, 
       MAX(u.[Date]) AS dateprix 
FROM   (SELECT tf.codearticle, 
               tf.datefacturation, 
               tv.[Date] 
        FROM   tablefacturation AS tf 
               INNER JOIN tablevaleurs AS tv 
                 ON ( tv.[Date] <= tf.[DateFacturation] ) 
                    AND ( tf.[CodeArticle] = tv.[codeart] )) AS u 
GROUP  BY u.codearticle, 
          u.datefacturation;

Il suffit ensuite de reprendre la requête précédente et de faire les jointures ad-hoc avec la table [TableValeurs] à l’aide des assistants pour aller chercher le prix correspondant.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 17h57   #6
Invité de passage
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 1
Points : 1
Bonjour f-leb,

tu as parfaitement compris la requete que je voudrai sauf que ce sont les prix que je voudrai afficher et non les dates.

En fait la deuxieme liste n'est pas une table mais une requete reprenant une table regroupant les factures avec une colonne en plus affichant les prix de reveint de la table des valeurs que j'aurait dû appeller table des prix de revient.

Merci pour vos réponses
patougaffou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 18h12   #7
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonjour patougaffou,

Citation:
Envoyé par f-leb Voir le message
Il suffit ensuite de reprendre la requête précédente et de faire les jointures ad-hoc avec la table [TableValeurs] à l’aide des assistants pour aller chercher le prix correspondant.
la requête que j'ai proposée n'est qu'une étape intermédiaire pour récupérer la date où trouver le prix. Access permet de créer des requêtes faisant participer d'autres requêtes.

Pour arriver à tes fins, il suffit donc de créer une nouvelle requête avec les assistants:
RequetePrecedente========TableValeurs

avec jointures sur les deux champs:
RequetePrecedente.dateprix-----------TableValeurs.Date
RequetePrecedente.codearticle--------TableValeurs.Codeart

là, tu sélectionnes les champs que tu souhaites afficher et ça devrait marcher...Je te laisse adapter avec tes noms de tables/requêtes/champs.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 13h19   #8
Invité de passage
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 1
Points : 1
Merci f-leb,

J'ai compris et pu réaliser ma requete, ça marche parfaitement.

Mais explique moi un peu, si possible, cette méthode de requete intermediare ou le but de la manip afin de faire une recherche plus détaillée sur cette téchnique.

Je te remercie pour ta précieuse aide.
patougaffou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 19h09   #9
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Bonjour,

alors pour mieux décrire le principe, j’ai préféré décomposer le problème et me priver du gros SQL qui tache en passant par les assistants graphiques

Donc en partant toujours des tables [tableFacturation] et [tableValeurs] voici la décomposition en 3 étapes, la 2ème requête (nommée V) reprenant la 1ère (nommée U) et la 3ème et dernière (nommée Final) reprenant la 2ème :


Je pense qu’en testant les 3 requêtes séparément tu comprendras ce qu’elles font mais n’hésite pas à me relancer si ce n’est pas clair.

PS : il y a sans doute d’autres solutions et dans ce cas je suis preneur aussi
Images attachées
Type de fichier : png patougaffou.PNG (33,2 Ko, 1 affichages)
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h44.


 
 
 
 
Partenaires

Hébergement Web