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 de comptage


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 108
    Points : 80
    Points
    80
    Par défaut Probleme de comptage
    Salut !

    j'ai un probleme avec une de mes requetes SQL.
    Je dois compter le nombre de clients par produits, et le taux d'equipement du produit. Par exemple si la moitié des clients utilisent le produit 'coucou', celui-ci aura un taux de 50%

    la table CLIENTS contient toutes les informations des clients (identifiant, adresse,...)
    la table BIBLIO contient la liste de tous les clients, et leur Chiffres d'affaires de l'année pour chaque produit (N01 correspond au CA de Janvier, N02 Février,...)
    La table liste_pdt contient la liste de tous les produits et les gammes auxquels ils sont rattachés

    là, pas de problemes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Liste_Pdt.Pdt AS Produit, 
    Sum(IIf(Biblio.[N01]<>0 Or Biblio.[N02]<>0,1,0)) AS [Clients Période], FormatPercent(CDbl(Sum(IIf(Biblio.[N01]<>0 Or Biblio.[N02]<>0,1,0))/15330),2) AS [Taux période], 
    FROM Liste_Pdt, Biblio, Clients
    WHERE (((Biblio.Produit)=[Liste_Pdt].[Pdt]) AND ((Clients.idcli)=[Biblio].[idcli]))
    GROUP BY Liste_Pdt.Pdt;
    (15.330 est le nombre total de clients.)

    seulement un produit peut appartenir à une gamme.

    Exemple :
    la gamme 'COLIS' contient les produits 'Colis Express' et 'Colis Standard'

    dans la base, c'est construit comme ceci :

    TABLE liste_pdt
    Num | pdt | Marché
    1 |Colis Express | COLIS
    2 |Colis Standard | COLIS
    3 |Fourchette | COUVERTS
    4 |Colis Bleu | COLIS

    donc dans ma requete je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Liste_Pdt.Marche, Sum(IIf(Biblio.[N01]<>0 Or Biblio.[N02]<>0,1,0)) AS [Clients Période], FormatPercent(CDbl(Sum(IIf(Biblio.[N01]<>0 Or Biblio.[N02]<>0,1,0))/15330),2) AS [Taux période]
    FROM Liste_Pdt, Biblio, Clients
    WHERE (((Biblio.Produit)=[Liste_Pdt].[Pdt]) AND ((Clients.idcli)=[Biblio].[idcli]))
    GROUP BY Liste_Pdt.Marche
    ORDER BY Count(Biblio.idcli) DESC;
    Seulement je m'apercois que le taux période dépasse les 100%...

    en ajoutant l'identifiant des clients, je vois que certains clients sont comptés plusieurs fois. dans l'exemple, si le client fais du 'Colis Express', du 'Colis Bleu' et du 'Colis Standard', il est compté 3 fois quand j'execute la requete

    MARCHE | idCli | Clients Période
    COLIS | 120 | 3

    et lorsque que l'on fait le compte pour tous les clients, on trouve un nombre de clients supérieur au nombre total de clients...

    il devrait afficher

    MARCHE | idCli | Clients Période
    COLIS | 120 | 1


    Comment faire pour que ma requete ne compte qu'une fois un client? pourtant je lui dis bien de faire un regroupement sur le marché.

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 108
    Points : 80
    Points
    80
    Par défaut
    bonjour !

    en fait je suis toujours bloqué, j'ai essayé plusieurs trucs mais a chaque fois je n'ai pas le bon résultat...

    par exemple en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Liste_Pdt.Marche, Sum(IIf(Biblio.[N01]<>0 Or Biblio.[N02]<>0,Clients.idcli,0)) AS [Clients Période], FormatPercent(CDbl(Sum(IIf(Biblio.[N01]<>0 Or Biblio.[N02]<>0,Clients.idcli,0))/15330),2) AS [Taux période]
    FROM Liste_Pdt, Biblio, Clients
    WHERE (((Biblio.Produit)=[Liste_Pdt].[Pdt]) AND ((Clients.idcli)=[Biblio].[idcli]))
    GROUP BY Liste_Pdt.Marche
    ORDER BY Count(Biblio.idcli) DESC;
    je pensais qu'il me compterai le nombre d'identifiant clients, seulement il le fait pour chaque Produit et non pour chaque Marché, un marché contenant un ou plusieurs produits. S'il me compte bien les identifiants, il me le compte 1 fois pour chaque produit d'un marché, du coup cela revient au meme...

Discussions similaires

  1. [XL-2003] Probleme de comptage en vba
    Par Marc31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/06/2012, 12h34
  2. [XL-2007] probleme de comptage avec des chaines de caractères
    Par souad12 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/05/2011, 08h28
  3. Probleme de comptage
    Par Oberown dans le forum Langage SQL
    Réponses: 6
    Dernier message: 09/04/2010, 17h20
  4. Probleme de comptage dans une fonction
    Par kev484 dans le forum Débuter
    Réponses: 4
    Dernier message: 18/09/2008, 12h57
  5. [SQL] Probleme de comptage distinct des lignes
    Par shagun dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 27/04/2007, 16h38

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