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 :

Requête avec ET sur 1 champs


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Requête avec ET sur 1 champs
    Bonjour,
    J'ai un bug quelque part dans une requête. Je voudrais l'ensemble des clients possédant un ampli A et des enceintes B.
    si je fait ou, c'est bon mais si je fais ET, il y en a zéro alors que j'en ai une dizaine.
    pour ce faire j'utilise 2 champs "matériel " et "Marque". Que je sois en Access 2007,2010 ou 2013.
    merci de votre aide
    Papaours old

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    papaoursold,

    Envoie nous un schéma de ton MCD ainsi que le Sql de ta requête !

    Cela nous permettra de mieux comprendre ton problème

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 688
    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 688
    Points : 57 211
    Points
    57 211
    Billets dans le blog
    40
    Par défaut
    salut,

    j'anticipe le MCD mais on doit pouvoir y arriver avec une requête de ce genre :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT idClient FROM LaTable
    WHERE materiel in ("ampli A", "enceinte B")
    GROUP BY idClient
    HAVING Count(*)=2

    à voir...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut suite
    bonjour,
    table
    code client matériel marque
    c1 ampli a
    c1 encein b
    c2 encein b
    c3 ampli a
    c3 encein b
    je veux récupérer c1 et c3 qui ont donc un ampli de marque a ET des enceintes de marque b.
    La table est simple la requête ne fonctionne pas.
    En réalité, la table comporte plus de champs et 10000 enregistrements, la requête est plus complexe car je viens chercher des éléments dans un formulaire ; mais le principe est là.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Details Factures].CODE, [Details Factures].Code_Famille, [Details Factures].Marque, [Details Factures].Code_Famille, [Details Factures].Marque
    FROM [Details Factures]
    WHERE ((([Details Factures].Code_Famille)="ampli") AND (([Details Factures].Marque)="naim") AND (([Details Factures].Code_Famille)="dac") AND (([Details Factures].Marque)="naim"))
    ORDER BY [Details Factures].CODE;
    ceci me donne zéro client
    merci

  5. #5
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    PapaOursOld bonsoir,

    Je référence deux fois la même table dans la requête pour effectuer ce genre de traitement (tu peux utiliser les Alias pour simplifier) :

    Cela te donne donc (à adapter bien évidemment : )

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Details Factures].Marque, [Details Factures_1].Marque
    FROM [Details Factures] INNER JOIN [Details Factures] AS [Details Factures_1] ON [Details Factures].Code_Famille = [Details Factures_1].Code_Famille
    GROUP BY [Details Factures].Marque, [Details Factures_1].Marque
    HAVING ((([Details Factures].Marque)="ampli A") AND (([Details Factures_1].Marque)="encein b"));

    Tu peux utiliser également la méthode de F-Leb :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT [Details Factures].Code_Famille
    FROM [Details Factures]
    WHERE ((([Details Factures].[Marque]) In ("ampli a","encein b")))
    GROUP BY [Details Factures].Code_Famille
    HAVING (((Count(*))=2));

    Sur l'ensemble des enregistrements, regarde celle qui te paraît la mieux adaptée et/ou la plus performante

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Je regarde cela en fin de journée et je me remet sur le site pour répondre,
    Merci beaucoup
    Papaoursold

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,
    Cela ne marche pas, le nom du produit est ampli ou dac ou enceint et le nom de la marque est naim ou rega. ampli a n'existe pas.
    @+
    merci

  8. #8
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut les amis
    papaoursold
    Citation Envoyé par papaoursold Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    WHERE ((([Details Factures].Code_Famille)="ampli") AND (([Details Factures].Marque)="naim")  AND (([Details Factures].Code_Famille)="dac") AND (([Details Factures].Marque)="naim"))
    ORDER BY [Details Factures].CODE
    ;
    n'est pas possible!!!
    Jimbolion, c'est quoi moulticien?
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  9. #9
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    papaoursold,

    Dans l'exemple cité précédemment, je te confirme que la requête fonctionne.
    Reprends donc ton exemple et remplace les valeurs exemples par celle que tu souhaites (ampli a est un exemple que tu nous as fourni).

    moulticien : néologisme d'on on pourrait répondre touche à tout dans le domaine l'informatique

    JimboLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  10. #10
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    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 : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Sinon il y a la méthode avec deux EXISTS.
    C'est fastidieux à écrire, mais je crois que c'est ce qui se rapproche le plus de ce qui est souhaité.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DetFac.CODE, DetFac.Code_Famille, DetFac.Marque
    FROM   [Details Factures] AS DetFac
    WHERE 
    (((DetFac.Code_Famille)="ampli") AND ((DetFac.Marque)="a")     AND ((Exists (SELECT * FROM [Details Factures] As DetFac1 WHERE DetFac1.CODE = DetFac.CODE And DetFac1.Code_Famille='enceintes' And DetFac1.Marque='b'))<>False))
     OR 
    (((DetFac.Code_Famille)="enceintes") AND ((DetFac.Marque)="b") AND ((Exists (SELECT * FROM [Details Factures] As DetFac2 WHERE DetFac2.CODE = DetFac.CODE And DetFac2.Code_Famille='ampli' And DetFac2.Marque='a'))<>False)) ;
    Le premier EXISTS impose que le code client (DetFac.CODE) a été facturé pour des enceintes de marque b, au moins une fois.
    Il est conjugué (ET) à la condition 'ampli de marque a'.

    Le second EXISTS impose que le code client (DetFac.CODE) a été facturé pour un ampli de marque a, au moins une fois.
    Il est conjugué (ET) à la condition 'enceintes de marque b'.

    En résumé, la requête retourne les enregistrements pour ...
    - des amplis de marque a, à la condition (premier EXISTS) que le client ait acheté des enceintes de marque b.
    +
    - des enceintes de marque b, à la condition (second EXISTS) que le client ait acheté un ampli de marque a.

    Remarque:
    Les alias sur les noms de tables sont importants pour les critère WHERE DetFac1.CODE = DetFac.CODE et WHERE DetFac2.CODE = DetFac.CODE, pour qu'il n'y ait aucune ambiguïté.

    A+

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    bonjour et merci à tous,
    Je me remets dessus cet après midi et je vous teins au courant.
    @+
    papaoursold

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    bonsoir,
    Merci beaucoup à tous, cela fonctionne très bien avec la méthode EXISTS.
    Il me reste à intégrer cela à ma requête complète qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL = "SELECT  " & matabl & ".CODE, " & matabl & ".nom, [details factures].marque, " & matabl & ".codpost, " & matabl & ".ville, [details factures].code_famille, [details factures].libellé, [details factures].DATE_FACT, " & matabl & ".financier" _
    & " FROM " & matabl & " INNER JOIN [details factures]  ON " & matabl & ".CODE = [details factures].CODE   " _
    & " where  (" & cp & oulecp & vill & oulaville & choua1 & ou1 & " " & paslamark1 & mark1 & ou2 & libel1 & ")" & unavec2 & "(" & cp & oulecp & vill & oulaville & choua2 & ou3 & " " & paslamark2 & mark2 & ou4 & libel2 & ")" & deuxavec3 & "(" & cp & oulecp & vill & oulaville & choua3 & ou5 & " " & paslamark3 & mark3 & ou6 & libel3 & ")" & lastbu & "(" & dernach & ")" & pouvach & "(" & lepouvach & ")" _
    & " ORDER BY " & matabl & ".code;"
    ou leschamps sont des variables dans un formulaire. et comporte d'autres critères
    merci encore

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

Discussions similaires

  1. [AC-2013] Problème Requête avec Regroupement sur Champ Somme
    Par kesme dans le forum Access
    Réponses: 4
    Dernier message: 23/03/2015, 11h37
  2. Feuille de données basée sur requête avec entêtes légendes de champs
    Par clickandgo dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 22/05/2012, 17h46
  3. Requête SQLite avec SUM sur un champs
    Par Vanessa48 dans le forum Android
    Réponses: 12
    Dernier message: 24/03/2011, 14h41
  4. [AC-2002] Requête avec IIf et Dlast, champ sur une deuxième table
    Par mbuddy dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/06/2009, 04h33
  5. [MySQL] Requête avec condition sur un champ
    Par nonhosonno dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/02/2007, 14h00

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