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 :

[Access] Condition avec clause de groupage


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    Par défaut [Access] Condition avec clause de groupage
    Bonjour,

    Dans la requete suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM Societe S, Tireurs T WHERE S.IdSociete = T.IdSocieteT AND T.IdSocieteT = " & lIdSociete & " ORDER BY NomSociete"
    Comment ajouter à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T.IdSocieteT = " & lIdSociete & "
    une condition afin que seul les Societe S qui ont plus de 4 Tireurs soient selectionnées.

    Fikou

  2. #2
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 125
    Points : 125
    Points
    125
    Par défaut
    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    "SELECT S.IdSociete, count(*)  
    FROM Societe S, Tireurs T 
    WHERE S.IdSociete = T.IdSocieteT 
    AND T.IdSocieteT = " & lIdSociete & " 
    HAVING COUNT(*) > 4
    GROUP BY S.IdSociete 
    ORDER BY NomSociete"

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Tu t'appelles pas Valentin par hasard ?

    Tu n'indiques pas ton SGBD ni sa version : interdit par les règles du forum
    SELECT * : pas bon
    Du code spécifique à ton programme : à proscrire
    Une jointure non normée : à proscrire
    Requête non indentée : illisible
    Un ORDER BY NomSociété alors que tu ne sélectionnes qu'une société (ou alors c'est que les noms sont mal choisis)
    Ne sachant pas (à cause du *) ce que tu attends, pour moi, c'est impossible de te répondre (plusieurs solutions, en fonction de tes choix).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT <Liste des Champs>
    FROM FROM Societe S INNER JOIN Tireurs T ON  S.IdSociete = T.IdSocieteT 
    WHERE T.IdSocieteT = 12
    J'allais oublier : bonne fête

    PS : la solution de tostinni ne prends pas en compte l'eventuel besoin d'informations venues de la table Tireurs (ce que le * ne dit pas)
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Points : 14
    Points
    14
    Par défaut
    Il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM Societe S, Tireurs T 
    WHERE S.IdSociete = T.IdSocieteT 
    AND T.IdSocieteT IN ( Select  T2.IdSocieteT from Tireurs T2
                                     Having count(*) > 4
                                     Group by T2.IdSocieteT)
    ORDER BY NomSociete

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    Par défaut
    Merci pour vos réponses je vais tester.

    Pour Médiat :
    J'utilise une table Acess sous VB6.

    Je ne pratique pas beaucoup le SQL mais je vais en avoir diablement besoin prochainement.

    J'ai acheté le livre SQL de M. Brouard mais pas encore tous assimilé.

    Peut tu être plus précis Sur ces points : :
    SELECT * : pas bon
    Du code spécifique à ton programme : à proscrire
    Une jointure non normée : à proscrire
    Requête non indentée : illisible
    Merci

    Fikou

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 163
    Points : 80
    Points
    80
    Par défaut
    plutot que select * tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select a.champs1 a.champs2 
    from table a
    c'est plus rapide à l'exécution et c'est plus compréhensible pour tout le monde.

    L'indentation c'est la mise en page de ton code: les retour à la ligne avant un from, avant un where etc pour la bonne lecture et la compréhension encore.

    Quant au code spécifique, il s'agit de tes
    " & lIdSociete & "
    qui ne sont pas spécifiques au sql.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    Par défaut
    Re,

    Voici La dernière requete qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT NomSociete, IdSociete, Nom, Prenom, Licence, Npa, Localite, IdTireur, IdSocieteT FROM Societe S, Tireurs T WHERE S.IdSociete = T.IdSocieteT AND T.IdSocieteT = " & lIdSociete & " ORDER BY NomSociete"
    Je ne suis encore arrivé à imposer les société de plus de 4 tireurs pas tout testé.

    Pour noinneh :
    " & lIdSociete & "
    est une variable nmérique VB6.
    J'ai pas pigé a.champ1 ect.

    Fikou

  8. #8
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 125
    Points : 125
    Points
    125
    Par défaut
    Vu que je savais pas quoi faire avec le *, j'ai mis un exemple au pif

    Mais bon suit les conseils de Médiat, ca aide pour la comprehension du SQL.
    Pense a mettre les alias sur tes colonnes du genre T.Nom au lieu de Nom, sinon comment on sait d'ou vient cette colonne ?
    Enfin ton " & lIdSociete & " remplace le par une valeur d'IdSociete c aussi plus lisible.

    Cependant, je pige pas, tu veux une liste des societe qui ont plus de 4 tireurs ou alors recuperer les noms des tireurs en passant l'id des societe (ce que semble indiquer ta requete) et ne rien retourner si ta societe a moins de 4 tireurs ? (dans ce cas la requete de Bwain semble faire l'affaire).

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    Par défaut
    Re, Re,

    Je ne voudrait pas abuser mais suite à vos remarques et dans une autre situation j'ouvre mes tables de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT S.NomSociete, S.LocaliteSociete, S.IdSociete, T.Nom, T.IdSocieteT, T.IdTireur FROM Societe S, Tireurs T WHERE S.IdSociete = T.IdSocieteT ORDER BY NomSociete
    Cela m'affiche les société qui ont des tireurs, mais les sociétés qui ont des tireur s'affiche plusieur fois.

    Fikou

  10. #10
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 125
    Points : 125
    Points
    125
    Par défaut
    Citation Envoyé par fikou
    Re, Re,

    Je ne voudrait pas abuser mais suite à vos remarques et dans une autre situation j'ouvre mes tables de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT S.NomSociete, S.LocaliteSociete, S.IdSociete, T.Nom, T.IdSocieteT, T.IdTireur FROM Societe S, Tireurs T WHERE S.IdSociete = T.IdSocieteT ORDER BY NomSociete
    Cela m'affiche les société qui ont des tireurs, mais les sociétés qui ont des tireur s'affiche plusieur fois.

    Fikou
    Cela semble logique vu que tu inclues le nom du tireur dans ta requete donc forcement si une societe a 10 tireurs, tu auras 10 lignes avec 10 fois le nom de ta societe et le nom de chacun des tireurs.

    Si tu ne veux pas ca il faut une condition de groupement du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT S.NomSociete, S.LocaliteSociete, S.IdSociete, COUNT(T.Nom) 
    FROM Societe S, Tireurs T 
    WHERE S.IdSociete = T.IdSocieteT 
    GROUP BY S.NomSociete, S.LocaliteSociete, S.IdSociete
    ORDER BY NomSociete
    Et la tu auras une ligne par societe avec le nombre de tireurs dans chacune des societe.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    Par défaut
    Pour Tostinni,

    Après avoir posté et lu vos réponses j'ai changé mon analyse.

    En fait il faudrai que j'affiche toutes les sociétés qui ont plus de 4 tireurs.
    Table Societe : IdSociete nom, adresse ect.
    Table Tireurs : IdTireur, IdSocieteT, Discipline, Nom, Prenom ect.

    Par la suite il faudrai aussi que je sépare par dicispline (toute les societe qui on + de 4 tireurs d'une discipline (4 discipline))

    Je sais là j'abuse, je met le livre SQL sur ma table de chevet

    Fikou

  12. #12
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 125
    Points : 125
    Points
    125
    Par défaut
    Citation Envoyé par fikou
    Pour Tostinni,

    Après avoir posté et lu vos réponses j'ai changé mon analyse.

    En fait il faudrai que j'affiche toutes les sociétés qui ont plus de 4 tireurs.
    Table Societe : IdSociete nom, adresse ect.
    Table Tireurs : IdTireur, IdSocieteT, Discipline, Nom, Prenom ect.

    Par la suite il faudrai aussi que je sépare par dicispline (toute les societe qui on + de 4 tireurs d'une discipline (4 discipline))

    Je sais là j'abuse, je met le livre SQL sur ma table de chevet

    Fikou
    En rajoutant un HAVING COUNT(T.Nom) > 4 dans ma requete tu auras ta liste, pour la suite, inspire toi de ce thread et relis le passage sur les agroupements

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 311
    Points : 96
    Points
    96
    Par défaut
    Merci, merci à tous,

    Une requete qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT S.NomSociete, S.LocaliteSociete, S.IdSociete, 
    COUNT(T.Nom) 
    FROM Societe S, Tireurs T 
    WHERE S.IdSociete = T.IdSocieteT 
    GROUP BY S.NomSociete, S.LocaliteSociete, S.IdSociete 
    ORDER BY NomSociete
    Je n'ai pas compris ou mettre le HAVING COUNT(T.Nom) > 4 J'ai une erreur de syntaxe.
    Promis tostinni je vais lire les agroupements

    Fikou

  14. #14
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    cf http://sql.developpez.com/sqlaz/ensembles/#L2

    et en général : http://sql.developpez.com/sqlaz/ensembles/
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

Discussions similaires

  1. [Access] Expression avec une clause SQL faisant appel à une variable
    Par elgringo2007 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/06/2006, 13h02
  2. [C#] Requête MS Access (Problème avec Date)
    Par Erakis dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/02/2005, 22h54
  3. [XSLT][ACCESS]condition sur valeur
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 23
    Dernier message: 10/01/2005, 14h14
  4. Conditions avec liste de tuples
    Par Robert999 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/07/2004, 11h01
  5. [ Struts ] plusieurs conditions avec equal?
    Par njac dans le forum Struts 1
    Réponses: 7
    Dernier message: 04/06/2004, 09h04

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