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 :

Requete avec jointure sur la même table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut Requete avec jointure sur la même table
    bonjour,

    Tout d'abord je précise que je suis sous Sql Serveur Compact 2008.

    Pour vous expliquer ce que je veux faire je vais donner un exemple :

    J'ai une table
    Compteur (NumCptr, Rue, Commune, Index)

    J'aimerai, en une seule requete, avoir par rue le nombre de compteur, le nombre de compteurs relevés (colonne index non null) et le nombre de compteurs non relevés.

    Exemple :
    1 'rue 1' 'Commune1' 123
    2 'rue 1' 'Commune1' null
    3 'rue 2' 'Commune1' 12
    4 'rue 1' 'Commune2' null
    5 'rue 1' 'Commune2' 1254
    6 'rue 1' 'Commune2' 1


    Ma requete me renverrai :
    (rue, Commune, Nb Compteurs, nb Cptr Relevés, nb Cptr non Relevés)

    'rue 1' 'Commune1' 2 1 1
    'rue 2' 'Commune1' 1 1 0
    'rue 1' 'Commune2' 3 2 1


    Merci de votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
    	   commune,
    	   rue,
    	   count(NumCptr) AS "Nb Compteurs",
    	   sum(CASE WHEN Index IS NOT NULL THEN 1 ELSE 0 END) AS "nb Cptr Relevés",
    	   sum(CASE WHEN Index IS NULL THEN 1 ELSE 0 END) AS "nb Cptr non Relevés"
    FROM Compteur 
    GROUP BY commune, rue
    Au passage, attention aux noms de vos colonnes, Index est un mot réservé du SQL.

  3. #3
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut Piste
    EDIT : GRILLE !
    -----------------

    Tu peux le faire avec un group by:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT commune, rue, count(Index) CptReleves , count(*) CptTotal
    FROM Compteur
    GROUP BY commune, rue
    Tu obtiens le nombre de compteur relevé et le nombre de compteur total.
    Tu peux aussi faire la différence entre ses deux colonnes si tu souhaites avoir plutôt le nombre de compteurs non relevés en dernière colonne

    ERE
    Quand une tête pense seule, elle devient folle.

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut
    Parfait, merci de votre aide

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

Discussions similaires

  1. Jointure sur un même table avec utilisation MIN/MAX
    Par Chips_ dans le forum Requêtes
    Réponses: 4
    Dernier message: 13/12/2012, 14h29
  2. [MySQL] SELECT * avec jointure sur une même table
    Par Oprichnik dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/03/2011, 13h17
  3. Réponses: 3
    Dernier message: 12/06/2007, 23h31
  4. [MySQL] requête avec jointure sur la même table
    Par gwena54 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 08/05/2007, 11h22

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