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 :

Calcul de pourcentage


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Calcul de pourcentage
    Salut !

    A partir d'une vue "Lead" sur SQL Server 7.0 :

    Mois | Total | c | d | q
    3 | 1 | 0 | 1 | 0
    7 | 2 | 1 | 1 | 0
    9 | 3 | 1 | 0 | 2

    je voudrais obtenir le pourcentage que représente c, d et q par rapport au total ( somme des trois) et par mois.

    J'ai créé une nouvelle vue avec la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DISTINCT 
        mois, ROUND(c / Total * 100, 2) AS l1, ROUND(d / Total * 100, 2) AS l2, ROUND(q / Total * 100, 2) AS l3
    FROM dbo.LeadTotalIntermediaire
    WHERE ((Total > 0) AND (c > 0)) OR
        ((Total > 0) AND (d > 0)) OR
        ((Total > 0) AND (q> 0))
    j'obtiens ceci :

    Mois | l1 | l2 | l3
    3 | 0 | 100 | 0
    7 | 0 | 0 | 0
    9 | 0 | 0 | 0

    Je ne comprends pas pourquoi ça ne fonctionne que pour mars.
    J'ai rajouté la fonction round pensant que peut-être les décimales correspondant à 1/3 et 2/3 lui posaient problème, mais sans succès !
    J'ai rajouté les filtres dans la clause where , mais pareil !

    Je ne pense pas qu'une jointure de la table sur elle-même serait utile !

    Je serais infiniment reconnaissante envers la personne qui pourrait m'aider...
    Merci d'avance.

  2. #2
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Je pense que tes colonnes c, d et q sont de type entières.

    De ce fait, avec la façon dont tu as posé le calcul, il fait la division en premier et arrondi à 0 avant de multiplier par 100.
    Ca marche pour mars car 1/1=1.

    Si tu fais ceci, tu auras des meilleurs résultats déjà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT mois,(c*100 / Total) AS l1, (d*100 / Total) AS l2, (q*100 / Total) AS l3 
    FROM dbo.LeadTotalIntermediaire
    Par contre tu n'auras jamais de décimales car tes colonnes d'origine sont apparamment entières.
    Voir pour modifier le type d'origine ou passer par une table annexe de travail.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    CREATE TABLE T_LEAD
    (Mois int,
     c int,
     d int,
     q int)
     
    CREATE VIEW V_LEAD
    AS
    SELECT Mois, c + q + d as Total, c, d, q
    FROM T_LEAD
     
    INSERT INTO T_LEAD VALUES (3, 0, 1, 0)
    INSERT INTO T_LEAD VALUES (7, 1, 1, 0)
    INSERT INTO T_LEAD VALUES (9, 1, 0, 2)
     
    SELECT Mois,
           CAST(c AS FLOAT) / CAST(Total AS FLOAT) * 100 AS C_POURCENT,
           CAST(d AS FLOAT) / CAST(Total AS FLOAT) * 100 AS D_POURCENT,
           CAST(q AS FLOAT) / CAST(Total AS FLOAT) * 100 AS Q_POURCENT
    FROM V_LEAD
    A +

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci infiniment, ça marche !

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

Discussions similaires

  1. Calcul de pourcentage
    Par jambonstar dans le forum Enigmes
    Réponses: 12
    Dernier message: 13/11/2006, 14h36
  2. Calcul de pourcentages
    Par Lypertrophie dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 30/06/2006, 11h25
  3. Reqête avec un calcul de pourcentage
    Par jean-pierre96 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2006, 13h00
  4. Réponses: 1
    Dernier message: 10/01/2006, 20h35
  5. calcul de pourcentage
    Par PAUL87 dans le forum Access
    Réponses: 12
    Dernier message: 20/09/2005, 19h50

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