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

MS SQL Server Discussion :

SELECT count et Jointure interne


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Par défaut SELECT count et Jointure interne
    Bonjour,

    Je suis sous SQL Server 2005.
    Mon schema est le suivant :
    Ville(ID_ville, nom)
    Lieux(ID_Lieu, nom, ID_Ville)
    Visite(ID_Visite, ID_Lieu, ID_Ville)

    Une ville possède plusieurs lieux et une visite s'effectue dans un lieu.
    Je souhaiterais afficher le nombre de visite dans chacun des lieux d'une ville.

    Pour l'instant, j'ai la requête suivante :
    SELECT count(v.ID_visite) as nbVisite, l.nom as lieu
    FROM Visite v
    LEFT JOIN Lieux l ON l.ID_Lieu = v.ID_Lieu
    where v.ID_Ville = 13
    GROUP l.nom
    ceci m'affiche le résultat suivant :
    nbVisite | lieu
    --------------------------
    15 | Musée
    7 | Stade
    1 | Mairie
    J'aimerais avoir en plus les lieux de la ville ou le nombre de visite est nul. En fait je souhaiterais avoir le nombre de visite de tous les lieux d'une ville donnée. Par exemple :

    nbVisite | lieu
    --------------------------
    15 | Musée
    7 | Stade
    0 | Eglise
    0 | Port
    1 | Mairie
    0 | Plage
    Je sais pas comment modifier la requête pour avoir ce resultat.
    Cordialement

    Thomas

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 55
    Par défaut
    Bonjour Thomas,

    Dans la présente requête, tu fais l'extraction de la table visite, CAD, les lieux visités seulement, et c'est normal d'avoir ce résultat.
    Par contre tu dois extraire les informations sur les visites en joignant à gauche les deux tables Visite & Lieu pour avoir les lieus visités et non visités.

    Alors ta req deviendra :

    SELECT count(v.ID_visite) as nbVisite, l.nom as lieu
    FROM

    (select visite.id_visite,lieu.id_lieu,lieu.id_ville from
    lieu left outer join visite on visite.id_lieu=lieu.id_lieu) as v


    left outer JOIN Lieu l ON l.ID_Lieu = v.ID_Lieu
    where v.ID_Ville = 13
    GROUP by l.nom


    Bon courage

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 55
    Par défaut
    Citation Envoyé par brinx Voir le message
    Bonjour Thomas,

    Dans la présente requête, tu fais l'extraction de la table visite, CAD, les lieux visités seulement, et c'est normal d'avoir ce résultat.
    Par contre tu dois extraire les informations sur les visites en joignant à gauche les deux tables Visite & Lieu pour avoir les lieus visités et non visités.

    Alors ta req deviendra :

    SELECT count(v.ID_visite) as nbVisite, l.nom as lieu
    FROM

    (select visite.id_visite,lieu.id_lieu,lieu.id_ville from
    lieu left outer join visite on visite.id_lieu=lieu.id_lieu) as v


    left outer JOIN Lieu l ON l.ID_Lieu = v.ID_Lieu
    where v.ID_Ville = 13
    GROUP by l.nom

    Bon courage

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Par défaut
    Bonjour,

    merci pour ta réponse. Je comprends qu'il faut qu'il y ait la liste de tous les lieux dans le "FROM". Cependant la requête que tu m'as proposée renvoie le même résultat que précédemment.

    En exécutant juste la requête imbriquée
    SELECT visite.id_visite,lieu.id_lieu,lieu.id_ville
    FROM lieu left outer join visite on visite.id_lieu=lieu.id_lieu
    J'obtiens le résultat suivant :
    id_visite| id_lieu | id_ville
    --------------------------
    1 | 2 | 2
    2 | 3 | 2
    3 | 5 | 2
    4 | 5 | 2
    5 | 3 | 2
    6 | 1 | 1
    Alors que ma table lieu comporte 10 lieux pour la ville dont l'identifiant est 2

    J'ai l'impression que je n'effectue pas bien la jointure gauche.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 55
    Par défaut
    Bonjour,

    j'ai créé une base de données similaire et alimenté les tables par des données de test, j'ai exécuté la req et elle marche trs bien !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT count(v.ID_visite) as nbVisite, l.nom as lieu
    FROM 
    
    (select visite.id_visite,lieu.id_lieu,lieu.id_ville from 
    lieu left outer join visite on visite.id_lieu=lieu.id_lieu)
    
     as v
    left outer JOIN Lieu l ON l.ID_Lieu = v.ID_Lieu
    where v.ID_Ville = 13
    GROUP by l.nom 

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 55
    Par défaut
    voici des captures d'écran qui pourront d'aider
    Images attachées Images attachées      

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Par défaut
    Merci,

    Finalement cela fonctionne nikel. Je me suis trompé de base de test.
    Merci beaucoup encore une fois

    Thomas

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 55
    Par défaut
    voici des captures d'écran qui pourront t'aider

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

Discussions similaires

  1. SELECT Count et jointure
    Par Lynecoln dans le forum Langage SQL
    Réponses: 11
    Dernier message: 18/11/2010, 14h54
  2. De l'aide pour Jointure, avec selection count =0
    Par onemart dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/01/2009, 09h01
  3. select + count() ou SUM + jointure
    Par gilles974 dans le forum Requêtes
    Réponses: 6
    Dernier message: 31/10/2008, 13h58
  4. Select count avec jointure, en récupérant les 0 : possible ?
    Par littlewings dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2008, 12h57
  5. select count avec jointure, en récupérant les 0
    Par littlewings dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/07/2008, 11h58

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