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 :

Requete SQL et Etat [AC-2013]


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Points : 37
    Points
    37
    Par défaut Requete SQL et Etat
    Bonjour,

    Je développe actuellement sous microsoft access 2013 et j'ai une question que je n'ai pas réussi a résoudre par moi même

    J'ai une base de donnée avec des clients . J'aimerai faire un état a partir d'une requete qui m'afficherai

    Tout les client avec + de 1000 entré dans ma base
    ceux entre 400 et 1000
    ceux entre 400 200
    Ceux >200

    Le soucis c'est que , quand je fait une requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select Client.Nom
    From Client,Entrer
    Where Entrer.Client=Client.ID and COUNT(Entrer.Id)>1000
    ça me met que ce n'est pas une fonction d'agrégation :/

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


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

    Je suppose que tu peux faire un comptage avec regroupement :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Client.ID, Client.Nom, count(*) as NbEntrees
    FROM Client INNER JOIN Entrer ON Entrer.Client=Client.ID
    GROUP BY Client.ID, Client.Nom

    Ensuite tu peux rajouter un champ calculé Categorie dans la requête avec switch :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Switch (
              count(*)>=1000, "beaucoup trop", 
              count(*)>=400, "beaucoup", 
              count(*)>=200, "pas si mal", 
              count(*)>0, "au moins un" 
           ) as Categorie

    et faire un regroupement par Categorie dans l'état

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Points : 37
    Points
    37
    Par défaut
    toujours le même probleme :/ il me met

    "Désolé ... Votre requête n'inclut pas l'expression "ID" spécifiée en tant que partie d'une fonction d'agrégation"

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    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 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Peux-tu poster le code SQL de ta requête ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Points : 37
    Points
    37
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Produit.ID, Societe.Nom, Count(*) AS NbEntrees, Switch ( NbEntrees>=1000,"Trop", NbEntrees>=400,"un peu",NbEntrees>=200,"peu",NbEntrees>0,"insignifiant")
    FROM Produit INNER JOIN Societe ON Produit.Societe = Societe.ID
    GROUP BY Societe.Nom
    HAVING ((Count(*)>=1000)) OR ((Count(*)>=400)) OR ((Count(*)>=200)) OR ((Count(*)>=200));

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    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 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    dans le SELECT il y a l'id du produit et le nom de la société.

    Je supposes que tu veux faire un comptage par nom de société, il faut donc supprimer Produit.id dans le SELECT.

    Tu peux aussi supprimer le HAVING, inutile dans ce cas.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Points : 37
    Points
    37
    Par défaut
    c'est sur, mais ça ne résout pas mon probleme :/ maintenant il me met le même message avec Nom ...

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    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 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Societe.Nom, Count(*) AS NbEntrees, Switch ( NbEntrees>=1000,"Trop", NbEntrees>=400,"un peu",NbEntrees>=200,"peu",NbEntrees>0,"insignifiant")
    FROM Produit INNER JOIN Societe ON Produit.Societe = Societe.ID
    GROUP BY Societe.Nom

    Cette requête-là met un message d'erreur ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Points : 37
    Points
    37
    Par défaut
    malheureusement oui ... avec pour message d'erreur

    "Désolé ... Votre requête n'inclut pas l'expression "Nom" spécifiée en tant que partie d'une fonction d'agrégation"

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Points : 37
    Points
    37
    Par défaut
    Je crois qu'il n'aime pas le Count(*) , il me considère ça comme une expression dans le mode création de requete

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    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 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    C'est comme s'il manquait la ligne avec GROUP BY

    Sinon je ne vois pas, tu peux poster un extrait de ta base (nettoyée en ne gardant que le nécessaire, compactée et zippée) en pièce jointe ?

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Points : 37
    Points
    37
    Par défaut
    Je vais t'envoyer ça , mais je pourrai pas le faire avant demain soir :/

    en attendant je vais chercher ^^

  13. #13
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    J'ai testé la requête de Fabien avec mon vieil Access et elle tourne comme une horloge (par flemme ne n'ai qu'une table)... :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Nom, Count(*) AS NbEntrees, Switch(NbEntrees>=8,"Trop",NbEntrees>=4,"un peu",NbEntrees>=2,"peu",NbEntrees>0,"insignifiant") AS Categorie
    FROM SOCIETE
    GROUP BY Nom ;

    Cela dit, si N sociétés distinctes (Id différents) ont le même nom, on fait comme s'il n'y en avait qu'une. Par prudence, on peut faire GROUP BY ID, et dédoublonner avant de compter et ventiler. Votre avis ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Points : 37
    Points
    37
    Par défaut
    le soucis, c'est que je n'ai pas qu'une table mais 2, c'est de la d'où vient le soucis je penses

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    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 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    le soucis, c'est que je n'ai pas qu'une table mais 2, c'est de la d'où vient le soucis je penses
    Ah ? Dans ce cas, que donne :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Produit.Societe, Count(*) AS NbEntrees, Switch ( NbEntrees>=1000,"Trop", NbEntrees>=400,"un peu",NbEntrees>=200,"peu",NbEntrees>0,"insignifiant")
    FROM Produit
    GROUP BY Produit.Societe

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 63
    Points : 37
    Points
    37
    Par défaut
    je l'ai fais différemment du coup, j'ai fais un compte en vba pour l'afficher dans mon formulaire, merci quand même a vous et bonne journée

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/01/2012, 22h46
  2. SQL2K-SQL REQUETE SQL POUR ETAT MAITRE-DETAIL
    Par sir_ben dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 13/01/2011, 16h07
  3. affécter requete sql a un etat
    Par david87 dans le forum IHM
    Réponses: 2
    Dernier message: 06/06/2008, 14h17
  4. Requête SQL Server comme source d'un état
    Par gambi dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 04/09/2006, 16h38
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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