IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Recherche par rapport à 2 critères. [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    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+

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    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.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 777
    Points : 58 179
    Points
    58 179
    Billets dans le blog
    42
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    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

  7. #7
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 777
    Points : 58 179
    Points
    58 179
    Billets dans le blog
    42
    Par défaut
    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.

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    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.

  9. #9
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 777
    Points : 58 179
    Points
    58 179
    Billets dans le blog
    42
    Par défaut
    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 Images attachées  

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/01/2009, 13h43
  2. Réponses: 2
    Dernier message: 19/01/2009, 15h45
  3. ouvrir un formulaire par rapport à certains critères
    Par Cyriusix dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/05/2008, 08h56
  4. Code de recherche par rapport à une base de données
    Par mariafan dans le forum Langage
    Réponses: 5
    Dernier message: 11/03/2008, 18h17
  5. Recherche max par rapport à un critère
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/08/2007, 07h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo