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 :

Requête SQL avec Having Count


Sujet :

Langage SQL

  1. #1
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut Requête SQL avec Having Count
    Bonjour,


    Pour information, j'utilise le logiciel MS-Squery (dans un premier temps) pour faire mes tests.
    Ensuite, il faut savoir que je transporterai la requête dans Access, mais en soi ça change rien parce que ma requête SQl me donne pas ce que je souhaite.

    J'ai, dans une même table, l'ID01 et l'ID02 qui sont respectivement des données pères et des données fils : Par cela, j'entend dire qu'il peut m'arriver d'avoir, dans ID01, plusieurs fois un même numéro car plusieurs fils lui sont rattachés. Pour vous donner un exemple :

    ID01 ID02
    34 95
    34 96
    34 98
    35 104
    35 106
    36 107
    37 108

    Normalement, et si je suis pas idiot, ma requête ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT ID01, Count(ID02)
    FROM TableID
    WHERE Date>="01/06/2013") 
    GROUP BY ID01
    HAVING Count(ID02)>=2
    devrait me sortir un truc du genre :

    ID01 count(ID02)
    34 3
    35 2
    Sans les dernières lignes, vu que j'en ai qu'une. Pourtant, quand le lance ma requête, il me sort quand même celles qui n'ont qu'un résultat : il y au n problème dans ma condition d’utilisation de mon HAVING ?

    Deuxième question (tant que j'y suis ) : Au départ, je voudrait avoir enf ait les numéro ID qu'à chaque fois qu'il y en a au moins 2, pour cela, et dans le même genre d'idée j'avais écrit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT ID01, ID02
    FROM TableID
    WHERE Date>="01/06/2013") 
    GROUP BY ID01
    HAVING Count(ID02)>=2
    Pour avoir ça comme résultat :

    ID01 ID02
    34 95
    34 96
    34 98
    35 104
    35 106
    Malheureusement, ça coince aussi et ça me sort tout

    Auriez-vous une idée d'où pourrait provenir mon problème ?

    En vous remerciant par avance de vos réponses

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    A priori vos requêtes sont bonnes. Mais comme vous avez tronqué votre exemple je soupçonne que le problème se situe entre le clavier et l'écran...

    En effet dans votre requête vous faites un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Date>="01/06/2013")
    Or cette colonne n'existe pas dans les données que vous avez mentionné précédemment
    Et de surcroit cette ligne se termine par une parenthèse fermant sans parenthèse ouvrante correspondant !

    Soyez donc gentil en respectant la charte de postage du forum :
    http://www.developpez.net/forums/a69...gage-sql-lire/
    Sinon, on se fait chier pour vous pour rien !

    A +

  3. #3
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Je sais pas d'où vient cette parenthèse faute de frappe surement, car elle n'a rien à faire là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT ID01, Count(ID02)
    FROM TableID
    WHERE Date>="01/06/2013"
    GROUP BY ID01
    HAVING Count(ID02)>=2
    Et pour information, la Date est un 3e champ de ma table? C'est vrai que j'aurai du l'enlever dans mes conditions pour une meilleure compréhension de mon problème, car mon problème n'est pas au niveau de ça, mais plutôt au niveau des champs qui me ressortent

    Je te remercie en tout cas pour ta réponse, ça me réconforte dans mon idée.

    J'ai testé ce matin ma requête dans Access sur une table pourrite, et j'ai effectivement le bon résultat avec ma première. Par contre, pour la deuxième, ça marche pas correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT ID01, ID02
    FROM TableID
    GROUP BY ID01
    HAVING Count(ID02)>=2
    Auriez-vous une idée ?

  4. #4
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Et là ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT ID01, Count(ID02)
    FROM TableID
    GROUP BY ID01
    HAVING Count(ID02)>=2 and Date>=#06/01/2013#
    Nommer un champ "Date" ne doit pas trop plaire à Access ; C'est un mot réservé !

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    Citation Envoyé par illight Voir le message
    ça marche pas correctement
    Penses-tu que ta description du problème est suffisante pour obtenir des réponses ?

  6. #6
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Penses-tu que ta description du problème est suffisante pour obtenir des réponses ?
    Je pensais que mon résultat attendu était assez clair dans mon premier post :

    Citation Envoyé par illight Voir le message

    Deuxième question (tant que j'y suis ) : Au départ, je voudrait avoir enf ait les numéro ID qu'à chaque fois qu'il y en a au moins 2, pour cela, et dans le même genre d'idée j'avais écrit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT ID01, ID02
    FROM TableID
    WHERE Date>="01/06/2013") 
    GROUP BY ID01
    HAVING Count(ID02)>=2
    Pour avoir ça comme résultat :


    ID01 ID02
    34 95
    34 96
    34 98
    35 104
    35 106
    @pc75 => j'ai enlevé le champ date (car ma table est renseignée que depuis le mois de juin) pour voir si ça fonctionnait, mais c'est toujours pareil...

    En tout cas, et comme je l'ai dit un peu plus, haut cette première requête fonctionne dans Access, par contre pas la deuxième mais je ne sais pas si c'est possible de faire ce que je souhaite

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    J'ai relu tes messages et je n'ai pas trouvé les réponses aux questions que je me posais :

    Ton "ça marche pas" se traduit comment ?
    Un message d'erreur ? Lequel ?
    Un résultat erroné ? Lequel ?

  8. #8
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Effectivement, vu comme ça, on ne se comprenait pas du coup

    le "ça marche pas" se traduit par : ça ne me donne pas le bon résultat.

    Je n'ai pas d'erreur, mais le résultat que j'ai ne me convient pas, car il me donne ça :

    ID01 ID02
    34 95
    34 96
    34 98
    35 104
    35 106
    36 107
    37 108
    En gros le même résultat que celui de départ

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    Serait-ce cela que tu recherches ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  tb1.id01
        ,   tb1.id02
    FROM    tableid AS tb1
    WHERE   tb1.Date >= "01/06/2013"
        AND EXISTS
            (   SELECT  1
                FROM    tableid AS tb2
                WHERE   tb2.date >= "01/06/2013"
                    AND tb2.id01 = tb1.id01
                HAVING  COUNT(tb2.ID02) >= 2
            )
    ;

  10. #10
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Oh Yeah Merci beaucoup

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

Discussions similaires

  1. Requête SQL avec COUNT
    Par Kreepz dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/12/2014, 16h59
  2. Requête SQL avec 2 count
    Par la_chouette dans le forum Langage SQL
    Réponses: 24
    Dernier message: 27/06/2011, 09h45
  3. [MySQL] Requête SQL avec un Count.
    Par Requiem11 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/05/2009, 11h01
  4. Problème de requête SQL avec DISTINCT et COUNT ?
    Par [ZiP] dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/01/2007, 17h11
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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