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

Access Discussion :

Sélection d'une totalité dans access


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : salarié
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut Sélection d'une totalité dans access
    Bonjour à tous

    pourriez-vs m'aider à trouver une syntaxe SQL compatible avec Access pour sélectionner des enregistrements portant sur TOUS les objets d'une nature donnée et non pas seulement un au moins de ces objets.

    Je m'explique :

    la BdD est constituée des tables suivantes :
    - la table des Client, avec leurs références,
    - la table des Commandes, jointure avec CLIENT sur le champ Numéro de Client,
    - la table DETAIL DES COMMANDES, jointure avec Commandes sur le champ Numéro de commande, qui indique les numéros des produits commandés et les quantités commandées par commande
    - la table des PRODUIT fabriqués, jointure avec la table DETAIL DES COMMANDES sur la référence produit, qui indique aussi le libellé du produit.

    Je cherche à déterminer les clients qui ont commandé (entre autres) TOUS les produits fabriqués contenant de l'ACIER. Il y a 2 référénces de produits avec de l'acier, je veux dc sélectionner les clients dt les commandes contiennent les 2 types de produits en acier, et pas seulement un des deux, avec éventuellement d'autres produits qui ne sont pas en acier.

    Voici la syntaxe de la requête que j'ai rédigée, mais ça ne me donne pas le résultat attendu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT Ncli, Nom
    FROM T_Client a
    WHERE NOT EXISTS
     
    (SELECT *
    FROM T_Produit C
    WHERE  libelle like '*acier*'
    and  Npro not in (Select Npro
                                  From T_Detail d, T_Commande b
                                 Where D.Ncom = b.Ncom
                                             and b.Ncli = a.Ncli))
    Pouvez-vs m'aider svp
    Merci d'avance

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Pppa1,

    Suggestion (via l'assistant, c'est plus clair) :

    requête R1
    • Client=>Commande=>DétailCommande (FROM/LEFT JOIN) ;
    • uniquement les produit contenant "acier" (WHERE) ;
    • groupée par client, article (GROUP BY) ;
    • N°client, produit, count(*) (SELECT).

    ==> liste des clients ayant commandé au moins un produit "acier" avec le nombre de commande. Une ligne par client/produit.


    requête R2
    • R1 (FROM) ;
    • groupée par client (GROUP BY) ;
    • N°client, count(*) (SELECT) ;
    • uniquement count(*)=2 (HAVING).

    ==> liste des clients qui ont commandé 2 produits "acier" différents. Une ligne par client.


    requête R3
    • R2=>Commande=>DétailCommande (FROM/LEFT JOIN) ;
    • champs souhaités (SELECT).

    ==> liste de toutes les commandes des clients qui ont commandé 2 produits "acier" différents. Une ligne par client/commande/détail commande.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : salarié
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Bonjour Richard

    Merci d'essayer de m'aider.
    Est-ce qu'à chq résultat intermédiaire (R1 et R2) je dois constituer une vue sur laquelle la requête suivante opérera sa sélection ?

    de tte façon je devrai retranscrire en SQL, mais je veux déjà bien comprendre formellement la construction, sur le fond je pense que c'est clair, enfin je verrai lorsque je testerai mon script

    Merci de me dire

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Passes par l'assistant et stockes les requêtes tel qu'indiqué dans mon précédent post. R3 analyse R2 qui, elle même, analyse R1.

    Fais tourner le tout jusqu'à ce que tu obtiennes ce que tu souhaites : il sera toujours temps de s'occuper du code SQL.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : salarié
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Bonjour Richard

    Merci pr les conseils ; je regarde et vs tiens au courant.

    Qd vs mentionnez l "assistant", on parle bien de l'assistant de requêtes sous access (je n'en connais pas d'autre) ; si c'est bien ça j'ai perdu l'habitude de m'en servir, mais ça devrait revenir, sauf que je ne conçois pas clairement a priori comment on mentionne l'analyse de R1 ds l'assistant lorsqu'on traite R2 avec l'assistant, idem pr R3 avec R2...

    Si vs pouviez m'en dire + à ce sujet avant que je ne tâtonne.

    Merci par avance

    bien cordialement

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Pppa1,

    Citation Envoyé par Pppa1
    .../... on parle bien de l'assistant de requêtes sous access .../...
    ==> oui. Cet assistant graphique est aussi appelé QBE.


    Citation Envoyé par Pppa1
    je ne conçois pas clairement a priori comment on mentionne l'analyse de R1 ds l'assistant lorsqu'on traite R2 avec l'assistant, idem pr R3 avec R2
    ==> les requêtes stockées sont vues comme des tables : choisir l'onglet "requête" et sélectionner les requêtes mentionnées. Le SELECT final traduira la requête en question.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : salarié
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Bonsoir Richard

    j'ai écrit 2 requêtes R1 et R2, R2 aboutissant au résultat souhaité.
    J'ai vraiment perdu l'habitude de travailler avec l'assistant, alors ce que j'ai fait, j'ai codé en sql (Cf mon code des 2 requêtes) et regardé comment l'assistant le traduit en mode création (alors que je sais que bcp font la démarche inverse, d'ailleurs c'est principalement comme ça que j'ai appris SQL pr access).

    Reste un point que apparemment - si j'ai bien compris, mais dites moi - la R3ne règle pas.
    Si un client commande tjs le même produit mais en plusieurs commandes séparées, comment est-ce que je peux "l'éliminer", puisqu'au final il ne soit pas être sélectionné.

    Merci de me dire

    R1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.Ncli, a.Nom,  Count(*) AS NbCommande
    FROM T_client AS a, T_Commande AS b, T_detail AS d, T_produit AS c
    WHERE (((a.Ncli)=[b].[Ncli]) AND ((b.Ncom)=[d].[Ncom]) AND ((d.Npro)=[c].[Npro]) AND ((c.[Libelle]) Like '*acier*'))
    GROUP BY a.Ncli, a.Nom
    R2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT NCli, Nom, Npro, Count(*)
    FROM Richard_R1
    GROUP BY NCli, Nom,Npro, NbCommande
    HAVING NbCommande > 1

  8. #8
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    La requête R1 ne correspond pas du tout à celle proposée !... et pas de jointure... tu as groupé par a.Ncli, a.Nom de T_client !...

    Donc reprenons, via l'assistant :
    • ajouter la table T_client (FROM) ;
    • ajouter la table T_Commande (FROM) ;
    • ajouter la table T_detail (FROM) ;
    • ajouter la table T_produit (FROM) (oubliée précédemment) ;
    • lier T_client à T_Commande via NCli avec flèche à droite (LEFT JOIN) ;
    • lier T_Commande à T_detail via NCom avec flèche à droite (LEFT JOIN) ;
    • lier T_detail à T_produit via NPro avec flèche à droite (LEFT JOIN) ;
    • grouper par NCli, NPro (GROUP BY) ;
    • champs NCli, NPro, count(*) (SELECT) ;
    • uniquement NPro contenant "acier" (WHERE).
    ==> sauvegarder sous R1.

    Postes l'image graphique de R1 quand tu peux.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : salarié
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Merci pr votre persévérence.

    Que faut-il faire en mode création pr qu'apparaisse la ligne opération permettant de demander un regroupement ?

    Merci de me dire

    Ci joint la copie de l'interface asistant là où j'en suis.

    Espérant que c'est assez lisible, sinon je ferai autrement

    Bien cordialement

  10. #10
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Pppa1,

    Citation Envoyé par Pppa1
    Que faut-il faire en mode création pr qu'apparaisse la ligne opération permettant de demander un regroupement ?
    ==> un petit tour dans l'aide Access (très bien conçue) t'aurait donné la solution : il s'agit du bouton ∑, en haut.

    Pour Count(*), sur la ligne "Opération", choisir "Expression".
    Pour le champ "Libellé" de T_Produit, sur la ligne "Opération", choisir "Où" (WHERE).

    Re-postes l'image quand ce sera OK.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : salarié
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Bonjour Richard
    Hier 22h38
    grouper par NCli, NPro (GROUP BY) ;
    Ce jour 12 h 08
    Pour Count(*), sur la ligne "Opération", choisir "Expression".
    .

    En suivant cette dernière instruction, il semble que je perde la notion de regroupement.

    Sur la ligne opération, de ce que je comprends pr l'instant, c'est soit regroupement, soit expression, mais on ne pourrait pas sélectionner les deux modalités.

    Merci de me dire

  12. #12
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Citation Envoyé par pppa1
    Sur la ligne opération, de ce que je comprends pr l'instant, c'est soit regroupement, soit expression, mais on ne pourrait pas sélectionner les deux modalités.
    ==> sur la même ligne Opération :
    Regroupement, pour les champs regroupés : NCli, NPro ;
    Expression, pour le champ calculé issu du groupe : count(*).

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : salarié
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Dc voici (PJ zippée) mon résultat pr R1 ; merci de me dire si vs etes d'accord

  14. #14
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Je ne peux pas lire les .rar.
    Envoies un .zip ou l'image de la requête, comme précédemment.

  15. #15
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    OK, j'ai converti ton .rar en .zip.
    La requête est OK : elle te donne donc la liste des clients ayant commandé au moins un produit "acier" avec le nombre de commande (1 ligne par client/produit).

    Passes à la deuxième requête R2 :
    • R1 ;
    • groupée par client ;
    • N°client, count(*) ;
    • uniquement count(*)=2.
    ==> liste des clients qui ont commandé 2 produits "acier" différents (1 ligne par client).

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : salarié
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Bonsoir

    voici la R2

    Vs qui êtes un habitué du site, et moi qui ne suis pas un gros psoteur, je suis surpris de voir que ma zone verte lors de l'envoi de PJ se réduit comme peau de chagrin.

    Y-a-t-il des règles spécifiques pour la gestion des PJ ?

    Merci de me dire

  17. #17
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    OK, pour le R2.
    La R3 devrait te donner le résultat que tu souhaites.

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : salarié
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Bonjour Richard

    je ne comprends pas prquoi la R3 ?

    La R2 donne déjà le résultat souhaité, non ?

    Pr la gestion des PJ, vs ne savez pas ?

    Merci de me dire

  19. #19
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Pppa1,

    Citation Envoyé par Pppa1
    La R2 donne déjà le résultat souhaité, non ?
    ==> oui. Dans ce cas, n'oublies pas le bouton .

    Citation Envoyé par Pppa1
    je ne comprends pas prquoi la R3 ?
    ==> liste de toutes les commandes des clients qui ont commandé 2 produits "acier" différents. Une ligne par client/commande/détail commande. Pas indispensable, mais peut-être intéressant.

    Citation Envoyé par Pppa1
    Pr la gestion des PJ, vs ne savez pas ?
    ==> voir le tableau de bord de ton profil : il faut faire le ménage de tes anciennes pièces jointes pour en ajouter d'autres.

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : salarié
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    MERCI BCP

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

Discussions similaires

  1. Sélection d'une date dans un calendrier
    Par navis84 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 17/04/2012, 17h12
  2. Utilisation d'une Checkbox dans ACCESS
    Par boblebob dans le forum Access
    Réponses: 17
    Dernier message: 16/11/2005, 12h31
  3. Réponses: 29
    Dernier message: 03/11/2005, 10h37
  4. Sélection d'une ligne dans un JTable
    Par dam21 dans le forum Composants
    Réponses: 3
    Dernier message: 28/07/2004, 12h57
  5. Déplacer la sélection d'une ligne dans un stringgrid
    Par jer64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/03/2003, 00h57

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