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 :

Calcul de pourcentage dans une requête [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut Calcul de pourcentage dans une requête
    Bonjour,

    J'ai une requête dans laquelle j'ai une colonne de comptages et j'aimerais ajouter, à la suite, une colonne exprimant le pourcentage de chacun de ces comptages par rapport au total de ceux-ci.

    Est-ce que cela est possible ? Et si oui, comment puis-je m'y prendre ?

    Merci de votre attention.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    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 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Bonjour,

    tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT cd_tiers, date_fac, HT, HT/(select sum(ht) from ff)
    FROM FF;
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    Merci pour ta réponse, nico84, j'ai compris le système. Par contre, mon champ de comptage est déjà un COUNT donc je ne sais pas comment l'appeler dans la requête de calcul de somme (Ce que tu appelais HT dans ton exemple). Peux-tu m'éclairer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Numismatique.Site, Numismatique.TypeMonnaie, DateFrappe, Count(Numismatique.TypeMonnaie) AS Comptage, [Comptage]/(SELECT SUM(Comptage) FROM Numismatique) AS [%], tbl_NumTypeMonnaie.ID
    FROM tbl_NumTypeMonnaie INNER JOIN Numismatique ON tbl_NumTypeMonnaie.TypeMonnaie = Numismatique.TypeMonnaie
    GROUP BY Numismatique.Site, Numismatique.TypeMonnaie, "", tbl_NumTypeMonnaie.ID
    HAVING (((Numismatique.Site)=[Formulaires].[frm_Numismatique].[cbo_Site]) AND (Not (Numismatique.TypeMonnaie)="Impériale IVe siècle - Constantiniens" And Not (Numismatique.TypeMonnaie)="Impériale IVe siècle - Valentiniens/Théodosiens"))
    ORDER BY tbl_NumTypeMonnaie.ID;
    P.S. : J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     [Numismatique.TypeMonnaie]/(SELECT SUM(Numismatique.TypeMonnaie) FROM Numismatique) AS [%],
    Mais il me dit que "cette expression présente une syntaxe incorrecte, ou est trop complexe pour être évaluée."
    ... Après réflexion, cela semble logique puisque mon champ TypeMonnaie est un champ txt alors que je lui demande de faire la somme de ce dernier ^^° Ça ne peut pas fonctionner !

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    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 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Je pense qu'il faut utiliser la même opération, c'est le group by qui génère le % :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .../(SELECT Count(Numismatique.TypeMonnaie) FROM Numismatique)
    PS : si la somme des % de la requête doit faire 100% alors les conditions du HAVING (qui à mon avis devraient être dans un WHERE) doivent être recopiées dans ce select. En fait c'est 2 fois le même select au group by près :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Numismatique.Site, Numismatique.TypeMonnaie, DateFrappe, Count(Numismatique.TypeMonnaie) AS Comptage
    , [Comptage]/(SELECT Count(Numismatique.TypeMonnaie) FROM tbl_NumTypeMonnaie INNER JOIN Numismatique ON tbl_NumTypeMonnaie.TypeMonnaie = Numismatique.TypeMonnaie
    WHERE Numismatique.Site=[Formulaires].[frm_Numismatique].[cbo_Site] AND Not Numismatique.TypeMonnaie="Impériale IVe siècle - Constantiniens" And Not Numismatique.TypeMonnaie="Impériale IVe siècle - Valentiniens/Théodosiens") AS [%]
    , tbl_NumTypeMonnaie.ID
    FROM tbl_NumTypeMonnaie INNER JOIN Numismatique ON tbl_NumTypeMonnaie.TypeMonnaie = Numismatique.TypeMonnaie
    WHERE Numismatique.Site=[Formulaires].[frm_Numismatique].[cbo_Site] AND Not Numismatique.TypeMonnaie="Impériale IVe siècle - Constantiniens" And Not Numismatique.TypeMonnaie="Impériale IVe siècle - Valentiniens/Théodosiens"
    GROUP BY Numismatique.Site, Numismatique.TypeMonnaie, "", tbl_NumTypeMonnaie.ID
    ORDER BY tbl_NumTypeMonnaie.ID;
    A mettre en forme parceque tel quel c'est pas très lisible - même en supprimant les () inutiles
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    Excellent !

    Ça fonctionne nickel ! Merci beaucoup !

    En revanche, j'ai une autre petite question : Cette requête est en fait une requête UNION et je ne vois pas comment définir le format de mon champ comme "pourcentage" dans le mode SQL (sans avoir à multiplier par 100 et surtout pour limiter les décimales à 2)
    Existe-t-il un moyen de le définir ?

    PS :
    Citation Envoyé par nico84 Voir le message
    PS : si la somme des % de la requête doit faire 100% alors les conditions du HAVING (qui à mon avis devraient être dans un WHERE) doivent être recopiées dans ce select. En fait c'est 2 fois le même select au group by près :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Numismatique.Site, Numismatique.TypeMonnaie, DateFrappe, Count(Numismatique.TypeMonnaie) AS Comptage
    , [Comptage]/(SELECT Count(Numismatique.TypeMonnaie) FROM tbl_NumTypeMonnaie INNER JOIN Numismatique ON tbl_NumTypeMonnaie.TypeMonnaie = Numismatique.TypeMonnaie
    WHERE Numismatique.Site=[Formulaires].[frm_Numismatique].[cbo_Site] AND Not Numismatique.TypeMonnaie="Impériale IVe siècle - Constantiniens" And Not Numismatique.TypeMonnaie="Impériale IVe siècle - Valentiniens/Théodosiens") AS [%]
    , tbl_NumTypeMonnaie.ID
    FROM tbl_NumTypeMonnaie INNER JOIN Numismatique ON tbl_NumTypeMonnaie.TypeMonnaie = Numismatique.TypeMonnaie
    WHERE Numismatique.Site=[Formulaires].[frm_Numismatique].[cbo_Site] AND Not Numismatique.TypeMonnaie="Impériale IVe siècle - Constantiniens" And Not Numismatique.TypeMonnaie="Impériale IVe siècle - Valentiniens/Théodosiens"
    GROUP BY Numismatique.Site, Numismatique.TypeMonnaie, "", tbl_NumTypeMonnaie.ID
    ORDER BY tbl_NumTypeMonnaie.ID;
    A mettre en forme parceque tel quel c'est pas très lisible - même en supprimant les () inutiles
    Le total est bien égal à 100% dans ma requête UNION (Je dois quand même tester avec plus de valeurs dirversifiées pour vérifier)

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    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 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Je ne comprends pas bien la question

    Dans le table l'info est stockée comme un réel, le format prédéfini par access ne sert qu'à faciliter la génération automatique d'états

    Tu peux formater les champs qui servent à restituer l'info de la même façon... Sauf peut-être en cas d'affichage direct de la requête mais comme c'est pas joli-joli je fais toujours un petit formulaire

    Essaies d'ajouter format(...,'0.00%') dans la requête ou un truc dans ce genre ???
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  7. #7
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par nico84 Voir le message
    Dans le table l'info est stockée comme un réel, le format prédéfini par access ne sert qu'à faciliter la génération automatique d'états
    Tu peux formater les champs qui servent à restituer l'info de la même façon...
    Dans le cas présent, j'utilise la requête telle quel pour afficher des informations de comptage, sous forme de tableau et c'est l'une des colonnes que je veux formater, pas un contrôle.
    Citation Envoyé par nico84 Voir le message
    Sauf peut-être en cas d'affichage direct de la requête mais comme c'est pas joli-joli je fais toujours un petit formulaire
    Ayant déjà moults formulaires dans ma base, je ne vois pas trop l'intérêt d'en rajouter un pour des informations que je peux afficher directement via la requête

    Citation Envoyé par nico84 Voir le message
    Essaies d'ajouter format(...,'0.00%') dans la requête ou un truc dans ce genre ???
    La requête sql n'a pas l'air de connaître la fonction "Format"

  8. #8
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    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 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Je viens de tester
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT cdeVT_lg.code, format(remise,'0.0%')
    FROM cdeVT_lg;
    Ca marche nickel, vérifie ta syntaxe
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  9. #9
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    En effet, j'avais mal "organisé" ma syntaxe...

    Merci pour ton aide.

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

Discussions similaires

  1. SQL calculer pourcentage dans une requête
    Par phcm971 dans le forum HyperFileSQL
    Réponses: 13
    Dernier message: 29/10/2012, 11h15
  2. calcul de pourcentage dans une requête
    Par redoran dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/11/2010, 07h33
  3. faire un calcul d'age dans une requête hibernate
    Par sandrine49 dans le forum Hibernate
    Réponses: 3
    Dernier message: 14/02/2009, 11h42
  4. [Access] Calcule par ligne dans une requête
    Par Belze dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2006, 09h09
  5. Calcul de différence dans une requête
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/05/2005, 13h16

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