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 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    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
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  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 986
    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 986
    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 +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    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 ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  4. #4
    Membre Expert
    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
    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 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 132
    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 ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    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
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 132
    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 ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    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
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 132
    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
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Par défaut
    Oh Yeah Merci beaucoup
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

+ 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