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

Langage SQL Discussion :

SQL pour access ; du ET 'partiel'


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    Par défaut SQL pour access ; du ET 'partiel'
    Bonjour à tous

    je travaille sur une BdD access 2007

    J'ai une table qui reprend les produits commandés par les clients.

    Je veux sélectionner les clients qui ont commandé deux produits précis (et seulement ces deux produits, mais pas ceux qui en ont commandé qu'un des deux) parmi tous les produits qui ont pu être commandés par les clients.

    Comme je m'y attendais, la requête renvoie un résultat vide, car ts les clients susceptibles d être concernés en ont commandé d'autres.

    Voici ma syntaxe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT distinct a.Ncli, a.Nom
     
    FROM T_ProduitsCommandes a
     
    WHERE a.Npro = 'PA45' and a.Npro = 'PA60'
    Pouvez-vs me dire svp comment la modifier pr que le résultat soit opérationnel

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Votre requete essaie de renvoyer les lignes qui ont à la fois a.Npro = 'PA45' AND a.Npro = 'PA60'. Ceci est biensur impossible.

    Pour ce genre de cas une requête générique à adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select cli_id
    from ma_table
    where ma_cond in ('XXX', 'YYYY')
    group by cli_id
    having count(distinct (ma_cond)) = 2
    Le having count devra être de la même valeur que du nombre de condition recherchez.

  3. #3
    Membre confirmé
    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
    Par défaut
    Merci Punkoff

    votre requête fonctionne, il m'a juste fallu enlever le DISTINCT de la dernière ligne.

    Maintenant l'exercice se complique.

    Il y a un client qui a commandé les deux articles, mais un des deux articles a été commandé sur deux commandes différentes.

    Or la requête ne compte que ceux qui ont commandé les deux articles sur deux, et seulement deux, commandes distinctes.

    Y a-t-il un moyen d'aménager la requête, pour que tous les clients ayant commandé les 2 articles, quel que soit le nombre de commandes, soient sélectionnés ?

    de mon côté je regarde si je peux repenser la structure de la table.

    Merci de me dire

  4. #4
    Membre confirmé
    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
    Par défaut
    J'ai trouvé une solution à ce problème : il suffit de ne pas reprendre le champ N° de commande ds la table source.

    L'exercice a une suite. Au besoin je me permettrais de revenir.

    merci

  5. #5
    Membre confirmé
    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
    Par défaut
    C'est bon, j'ai terminé ; encore merci

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Citation Envoyé par pppa1 Voir le message
    Merci Punkoff

    votre requête fonctionne, il m'a juste fallu enlever le DISTINCT de la dernière ligne.
    Bonjour,

    Non il ne faut pas enlever le distinct.

    Pour reprendre votre cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    numCli    Npro 
    ------------------
    1           PA45
    1           PA45
    Sans le distinct la requête vous renverra ce client alors qu'il n'y a pas lieu d'être

  7. #7
    Membre confirmé
    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
    Par défaut
    bonjour

    SQL pour Access ne semble pas pouvoir traiter ce script.

    Ci-dessous ma requête complète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT a.Ncli, a.Nom, localite
    FROM T_ProduitsCommandes AS a
    WHERE a.Npro in ('PA45','PA60')
    GROUP BY a.Ncli, a.Nom, localite
    HAVING COUNT(distinct (a.Npro))=2  and Sum(MtCom) > 5000;
    si j'exécute ce script, Access me renvoie "fonction 'DISTINCT' non définie dans l'expression".

    Le script ainsi modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT a.Ncli, a.Nom, localite
    FROM T_ProduitsCommandes AS a
    WHERE a.Npro in ('PA45','PA60')
    GROUP BY a.Ncli, a.Nom, localite
    HAVING COUNT(a.Npro)=2  and Sum(MtCom) > 5000;
    ,

    donc en enlevant le DISTINCT non reconnu,

    me donne le résultat attendu, testé sur plusieurs cas en faisant varier les paramètres.

    Je reste à l'écoute de vos suggestions et commentaires

    bien cordialement

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Ah, limitation d'access ...

    Disons que si la requête marche c'est parce que dans votre table T_ProduitsCommandes vous n'avez pas plusieurs fois le même couple {Ncli, Npro}

    Sinon ça ne marcherait pas

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

Discussions similaires

  1. Syntaxe SQL pour access 2003
    Par castours dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 01/08/2011, 18h41
  2. Problème avec une requête SQL, pour access
    Par a.bott dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 23/09/2008, 17h08
  3. Sous-requêtes SQL pour ACCESS
    Par bastoon dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/08/2006, 21h41
  4. Requete SQL pour Access
    Par heraieros dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/01/2006, 14h15
  5. Requêtes SQL pour access
    Par cciocc dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/04/2005, 08h45

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