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 count renvoyant aussi les résultats=0


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Requête count renvoyant aussi les résultats=0
    Bonjour !

    J'ai un souci sur une requête qui me résiste, un peu d'aide serait grandement appréciée =P

    J'ai une table classification(cléunik, type, numéro, liblong)
    Une autre table avec mes données (qu'on appelera RHS).

    J'ai besoin de connaitre pour chaque occurence de la table classification qui répond à un critère (type="Provenance"), combien on trouve de lignes dans ma table de données, et ce même si on n'en trouve pas.

    En pratique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT classification.numero, classification.liblong, count(rhs.provenance) AS nbpat
    FROM RHS
    RIGHT JOIN classification ON classification.numero = rhs.provenance
    WHERE classification.type = 'Provenance'
    GROUP BY classification.numero
    ORDER BY classification.numero
    Résultat :
    numero liblong nbpat
    1 Unité de soins de courte durée 4309
    2 Unité de soins de suite et de réadaptation 2
    3 Unité de soins de longue durée 0
    4 Psychatrie 0
    6 Hospitalisation à domicile 0
    7 Structure d'hébergement médico-sociale 0

    donc tout est OK.

    Là où ça se complique, c'est quand j'ajoute un critère de sélection et de groupement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT rhs.um, classification.numero, classification.libellé, count(rhs.provenance) AS nbpat
    FROM RHS
    RIGHT JOIN classification ON classification.numero = rhs.provenance
    WHERE classification.type = 'Provenance'
    AND rhs.um = '001'
    GROUP BY classification.numero, rhs.um
    ORDER BY classification.numero
    Résultat :
    um numero liblong nbpat
    001 1 Unité de soins de courte durée 2604

    J'aurais besoin du résultat :
    um numero liblong nbpat
    001 1 Unité de soins de courte durée 2604
    001 2 Unité de soins de suite et de réadaptation 0
    001 3 Unité de soins de longue durée 0
    001 4 Psychatrie 0
    001 6 Hospitalisation à domicile 0
    001 7 Structure d'hébergement médico-sociale 0

    Voilà mon souci, sachant que j'aurai ensuite d'autres critères à rajouter (date etc)

    Merci d'avance à ceux qui tenteront de m'aider, ou qui m'ont lue jusqu'au bout :'D

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Passez ce filtre au niveau de la jointure.
    Par contre le UM restera à null sur les entrées sans correspondances.
    Vous pouvez le rajouter au niveau du select avec la fonction coalesce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      SELECT coalesce(r.um, '001') as um,
             c.numero, c.liblong,
             count(r.provenance) as nbpat
        FROM RHS r
             RIGHT JOIN classification c
               ON c.numero = r.provenance
              AND r.um = '001'
       WHERE c.type = 'Provenance'
    GROUP BY coalesce(r.um, '001'), c.numero, c.liblong
    ORDER BY c.numero asc;

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Mille mercis Waldar, ça fonctionne parfaitement ! (et quelle rapidité dans la réponse !)

    Bonne continuation =)

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

Discussions similaires

  1. Requête GROUP BY inclure les résultats NULL
    Par cantador dans le forum SQL
    Réponses: 14
    Dernier message: 10/10/2008, 08h45
  2. Transformer les résultats d'une requête dans un autre ordre
    Par keikun dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/04/2006, 16h29
  3. Limiter les résultats d'une requête à \today\' - n jours
    Par Eddy Duflos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/10/2005, 08h46
  4. Requête SELECT problème dans les résultats trouvés ...
    Par snoopy69 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/10/2005, 12h46
  5. [JDBC] Stocker les résultats d'une requête
    Par etiennegaloup dans le forum JDBC
    Réponses: 9
    Dernier message: 26/07/2005, 18h18

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