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

Requêtes et SQL. Discussion :

Probleme avec Count Distinct [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 125
    Points
    125
    Par défaut Probleme avec Count Distinct
    Bonsoir a tous ,
    J’ai un probleme avec une requete correlee.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TableB
    ID	Cat
    1	a
    1	a
    1	b
    2	c
    2	c
    3	d
    3	d
    3	e
    3	e
    TableA contient en fait les vendeurs (ID ) et TableB contient les vendeurs(ID) ainsi que les differentes categories de produits vendus(Cat).
    J’aimerais obtenir le tableau ci dessous. Ce dernier listera tous les vendeurs et le nombre de categories vendues; bien evidemment, le nombre de DIFFERENTES categories vendues.
    J’ai essaye le code suivant mais helas sans grand success.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Ta.ID
    ,(Select  Count(*) From (Select Distinct TableB.Cat 
    	                 From TableB 
    			 Where TableB.ID = Ta.ID) ) AS DistinctCountOfCat
    FROM TableA as Ta 
    INNER JOIN TableB   ON  Ta.ID = TableB.ID
    GROUP BY Ta.ID;
    Svp , j’ai grand besoin de votre precieuse aide.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    A priori la table A n'est pas nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, count(*) from (select distinct id, cat from tableB) group by id

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    je pense plutôt à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT IdCat.id,
           Count(*) AS [Nb cat différentes]
    FROM   (SELECT tableb.id,
                   tableb.cat
            FROM   tableb
            GROUP  BY tableb.id,
                      tableb.cat) AS IdCat
    GROUP  BY IdCat.id;
    philippe

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 125
    Points
    125
    Par défaut
    Bonjour et merci de m’avoir repondu. Vos reponses m’ont permis de voir déjà un peu plus clair.
    Cependandt, je precise que l’utilisation de TableA est necessaire dasns ce que je suis en train de faire. J’ai donne l’exemple de vendeurs et categories de produits vendus juste pour une illustration rapide et simple de mon probleme.
    Merci de m’aider.

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 125
    Points
    125
    Par défaut
    Re-bonjour,
    J’ai legerement modifie la reponse de PhilBen pour incluire la table TableA. Cela donne le code ci-dessous et doonne le resultat escompte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select Temp.ID 
    	,Count (*)
    From ( SELECT TableA.ID, TableB.Cat
    	FROM TableA INNER JOIN TableB ON TableA.ID = TableB.ID
    	GROUP BY TableA.ID, TableB.Cat) as Temp
    Group By Temp.ID ;
    Par contre , je serais tres reconnaissant si qlq’un pouvait m’expliquer pourquoi la requete ci-dessous ne marche pas. Pourtant , elle contient –selon le niveau de mes connaissances- tous les bons ingredients d’une belle requete correlee. est-ce une limitation de Access ou y a t-il qlqchose qui m'echappe?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Ta.ID
    ,(Select  Count(*) From (Select Distinct TableB.Cat 
    	                 From TableB 
    			 Where TableB.ID = Ta.ID)  ) AS DistinctCountOfCat
    FROM TableA  As Ta
    GROUP BY Ta.ID;

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Ta.id est appelé dans une sous-requete de rang 2 mais il n'est connu que dans la sous-requete de rang 1, Il faut donc le remonter d'un étage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Ta.ID
    ,(Select  Count(*) From (Select Distinct Id, Cat from table B) x
    			 Where x.ID = Ta.ID)  ) AS DistinctCountOfCat
    FROM TableA  As Ta
    GROUP BY Ta.ID;

  7. #7
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 125
    Points
    125
    Par défaut
    Bonjour et merci pour ton explication.
    ceci prouve que j'ai encore du chemin a faire pour maitriser les requetes correlees.

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

Discussions similaires

  1. Probleme avec count(*)
    Par Le Marlou dans le forum Hibernate
    Réponses: 4
    Dernier message: 26/01/2010, 19h12
  2. Probleme avec select distinct row from .
    Par jean christophe dans le forum Requêtes
    Réponses: 4
    Dernier message: 08/10/2008, 19h17
  3. [CR?]Probleme avec "Count"
    Par dilalex dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 10/03/2008, 10h09
  4. Probleme avec COUNT() contenant une condition
    Par smarties dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/07/2007, 10h19
  5. Query sur plusieurs colonnes avec count(distinct...)
    Par Jeankiki dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/08/2004, 15h22

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