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 :

Tri de données selon un critère [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Tri de données selon un critère
    Bonjour à toutes et à tous,

    Je suis étudiant et débutant en Access, ma demande pourra peut-être parraitre simplet mais je post quand même.

    J'aimerais effectuer un tri dans ma base de données mais en gardant seulement les code articles contenant moins de dix articles.

    En gros il me faudrais la syntaxe pour avoir seulement les données si le code article se répète dix fois ou moins.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    salut,
    pour avoir le nombre d'enregistrements par élément, tu peux utiliser la fonction COUNT().
    exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IDarticle, COUNT(IDarticle) as nb from MaTable GROUP BY IdArticle;
    Pour le filtre sur le nombre < 10, tu placeras la clause HAVING
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING COUNT(IdArticle)<10
    exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IDarticle, COUNT(IDarticle) as nb from MaTable GROUP BY IdArticle HAVING COUNT(IDarticle)<10;

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Re,

    La syntaxe me semble bonne mais je n'arrive pas à situer cette requête dans le pavé SQL d'Access.

    Sinon est-ce que je ne pourrais pas simplement transformer le "HAVING COUNT(IdArticle)<10" en un critère digestible pour Access?

    Merci pour l'aide

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    salut,
    c'est totalement digeste tu sais

    un peu de lecture sur la partie HAVING dans la requête SQL :
    http://access.developpez.com/sql/#L1.2.1

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Re,

    Access me met "erreur de syntaxe" c'est pour ça que je demandais ^^' j'ai re-tester et cela ne fonctionne toujours pas.

    Sinon doit-je le mettre à une place bien précise? Comme je n'ai pas pratiquer le SQL depuis longtemps je m'y perd un peu ^^'

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    A quoi ressemble ta requête SQL actuelle stp ?

  7. #7
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Re,

    Elle ressemble à rien xD étant donné que c'est la requête avec d'autre requêtes imbriquées dedans c'est un vrai sac de noeuds.

    Et comme j'ai pas le droit de divulguer je préfère t'envoyer ça par MP si tu le veux bien ^^

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    En principe, on a pour habitude de ne pas résoudre de problèmes par MP, dans la mesure où les éléments et pistes évoquées doivent pouvoir servir aux autres membres qui rencontreraient les mêmes soucis

    Sans code SQL, il nous sera plus difficile d'arriver à trouver des solutions pérennes.

    Regarde bien les tutoriaux sur les syntaxes, et regarde à quel niveau l'erreur est détectée par Access, ca te permettra d'en savoir plus sur ce qu'il faut corriger.

  9. #9
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Re,

    Oui je me doute bien, sinon l'erreur vien du "COUNT" quand je l'imbrique dans ma requête SQL.

    On me dit "opérateur absent" est-ce que je doit spécifier quelque chose?

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    peux-tu simplifier ta requête pour nous montrer juste les parties SELECT, GROUP BY et HAVING stp ?

  11. #11
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Re,

    Il n'y a pas de partie HAVING

    Et voici une version très light (le codeAchat correspond à la valeur que je doit comter et trier afin d'avoir seulement les codes achats qui ont moins de 10 articles) :

    SELECT TBL_Article.CodeAchat, TBL_Nomenclature.Composé, TBL_Article.Emplacement
    FROM mes_tables
    WHERE mes_conditions
    ORDER BY TBL_Article.LigneProduit;

    Merci =)

  12. #12
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    ok,
    première étape, on va faire la partie COUNT :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT COUNT(TBL_Article.CodeAchat) AS NbCodeAchat, TBL_Article.CodeAchat, TBL_Nomenclature.Composé, TBL_Article.Emplacement
    FROM mes_tables
    WHERE mes_conditions
    GROUP BY TBL_Article.CodeAchat, TBL_Nomenclature.Composé, TBL_Article.Emplacement
    ORDER BY TBL_Article.LigneProduit;

    jusque là ca fonctionne ?

  13. #13
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Re,

    Ca à l'air de passer sauf pour le ORDER BY

    Le message d'erreur : "Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifiée 'TBL_Article.LigneProduit' comme une partie de la fonction d'agrégat."

    Est-ce qu'il faut mettre un ORDER BY TBL_Article.CodeAchat à la place?

    *edit*
    Si je fais en remplaçant par TBL_Article.CodeAchat j'obtient une colonne qui compte mon nombre de CodeAchat si c'est ce qui devait ce produire alors oui ça fonctionne jusque là

  14. #14
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    ok,
    donc si on vire le order by pour l'instant et qu'on rajoute le HAVING? ca devrait donner ceci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT COUNT(TBL_Article.CodeAchat) AS NbCodeAchat, TBL_Article.CodeAchat, TBL_Nomenclature.Composé, TBL_Article.Emplacement
    FROM mes_tables
    WHERE mes_conditions
    GROUP BY TBL_Article.CodeAchat, TBL_Nomenclature.Composé, TBL_Article.Emplacement
    HAVING COUNT(TBL_Article.CodeAchat)<10;

  15. #15
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Re,

    Tout fonctionne mais au niveau de mon extraction je me retrouve quand même avec des CodeArticle de plus de 40 articles mais les plus grosses familles ont disparues c'est déjà ça de gagner!

    Sinon pas de soucis au niveau SQL

  16. #16
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    vérifie que ton regroupement peut se faire aussi sur TBL_Nomenclature.Composé et TBL_Article.Emplacement.

    Si ce n'est pas le cas, il faudra faire une sous requête intermédiaire =)

  17. #17
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Re,

    Je pense que le problème vien du comptage, j'arrive pas à savoir comment il s'y prend pour compter le nombre de codeAchat.

    Par exemple pour un codeAchat ou visuelement j'en ai 23 il en compte plusieurs ligne de 1 comme si le codeAchat était différent.

    Il n'y a vraiment aucun moyen de le forcer à compter le nombre de codeAchat différent pour ensuite lui demander d'afficher le nombre de codeAchat qui ont moins de dix articles?

    Sachant que le codeAchat se répète pour chaque article qui le compose.

    Si on compte un nombre de codeAchat > 10 alors on l'exclu.

    Comme ça au final je n'ai qu'une contrainte et je peux afficher mes résultats après.

    En tout cas merci j'ai pas mal progressé grace à toi =)

  18. #18
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    En fait la question est :
    si tu as ceci en table :
    codeAchat Composé Emplacement
    1 A Paris
    1 A Lyon
    1 B Paris
    2 A Paris
    tu veux voir quel résultat ?
    Nbachat codeAchat
    3 1
    1 2
    ou bien
    Nbachat codeAchat Composé Emplacement
    1 1 A Paris
    1 1 A Lyon
    1 1 B Paris
    1 2 A Paris

  19. #19
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Re,

    Hum on va dire que sur une table qui me donne :

    CodeAchat / CodeArticle
    Paris / 01
    ... / ...
    Paris / 12
    Lyon / 01
    Lyon / 02
    Bordeaux / 01
    Bordeaux / 02

    Le résultat serait

    Lyon / 01
    Lyon / 02
    Bordeaux / 01
    Bordeaux / 02

    Car Paris aurait plus de dix articles (12), mais Lyon et Bordeaux eux en ont deux donc sont affichés.

    Les seules informations importantes sont le codeArticle et le codeAchat.

    *edit*

    ça se rapproche plus de la première de tes deux solutions =).

  20. #20
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Re,

    En fait j'ai trouvé la source de mon problème, si je crée une requête qui me compte juste le nombre de codeAchat comme voulu cela fonctionne mais si j'ajoute les codeArticle cela dérègle tout, je pense que ça vien du fait que le codeArticle est la clé primaire de la table sur laquelle je travail.

    Bref je vais essayer de démêler tout ça.

    Merci pour l'aide et le temps passer pour moi et bonne continuation.

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

Discussions similaires

  1. recherche dans base de données selon 2 critères
    Par Nathalie68 dans le forum Excel
    Réponses: 1
    Dernier message: 20/02/2008, 21h19
  2. Tri de colonnes selon 1 critère
    Par cynoq dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/01/2008, 14h43
  3. Tri de colonnes selon 1 critère
    Par cynoq dans le forum Excel
    Réponses: 1
    Dernier message: 23/01/2008, 21h04
  4. Réponses: 1
    Dernier message: 30/07/2007, 19h37
  5. [SQL] Comment rechercher une donnée selon un critère !
    Par Il_TiRaNNo dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 09/05/2007, 14h59

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