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

Access Discussion :

Calcul requête avec conditions multiples


Sujet :

Access

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Calcul requête avec conditions multiples
    Bonjour à tous,

    Je vous expose mon problème.

    J'ai une requête qui fait la somme du nombre de points acquis par une population sur une période donnée.

    J'ai donc une colonne Cumuloints qui fait la somme du champs Points

    Jusque là tout va bien.

    Ensuite je souhaite calculer automatiquement un montant associé au nombre de points de chaque personne et là je bloque

    j'ai commencé à chercher avec iff et switch mais je n'arrive à rien.

    Les primes à calculer dans mes conditions sont basées sur le barème suivant :

    entre 2 et 5 points : prime = total points X 3
    entre 6 et 10 points : prime = total points x 5
    entre 11 et 20 points : prime = 90
    etc.

    Expr1: Switch([cumul]>2<5;[cumul]*3;[cumul]>6<10;[cumul]*5)

    cela ne fonctionne pas déjà sur ces 2 seules conditions

    merci d'avance pour votre aide

    Amicalement,

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    le mieux serait de constituer une petite table support de la forme
    mini maxi coeff fixe
    0 1 0
    2 5 3
    6 10 5
    11 20 90

    et de calculer la prime par une requête union

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    ok merci mais je cherche solution intégrée à ma requête pour simplifier les choses, je pense (j'espère) que c'est possible

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Citation Envoyé par Phullbrick
    ok merci mais je cherche solution intégrée à ma requête pour simplifier les choses, je pense (j'espère) que c'est possible
    Hello,

    c'est possible mais c'est vraiment dommage de passer à côté de la solution proposée par Random, qui est la plus propre et qui permet une maintenance facile, en particulier si les bornes ou les coeff doivent changer.

  5. #5
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Sinon va voir ici
    A adapter en fonction de ton cas bien sur.
    Exemple de code que j'ai fait à partir de cette source :
    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
    22
    23
    24
    25
    26
    Function Tranche(ByVal Valeur As Currency) As String
        On Error GoTo err
     
        If Valeur < 375 Then
            Tranche = "< 375 euros"
            Else
            If Valeur < 425 Then
                Tranche = "entre 375 et 425 euros"
                Else
                If Valeur < 490 Then
                    Tranche = "entre 425 et 490 euros"
                    Else
                    If Valeur < 620 Then
                        Tranche = "entre 490 et 620 euros"
                        Else
                        If Valeur < 2000 Then
                            Tranche = "entre 620 et 2000 euros"
                            Else
                            If Valeur > 1999 Then
                                Tranche = "> 2000 euros"
                            End If
                        End If
                    End If
                End If
            End If
        End If
    A la place de tu peux mettre une formule de calcul à intégrer dans ta requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tranche: Tranche([Potentiel_financier])

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Il n'est pas en revanche nécessaire de faire une requête union ...

    un exemple de calcul de rang sur un forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tblUsers.idUser, tblUsers.Login, tblUsers.Messages, tblPlage.info
    FROM tblPlage, tblUsers
    WHERE tblUsers.Messages Between [tblPlage].[binf] And [tblPlage].[bSup];
    tblUsers(idUser, login, Messages)
    tblPlage(bInf, bSup, Info)

    bInf et bSup sont des numériques Borne Inférieure et Borne Supérieure

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par random
    le mieux serait de constituer une petite table support de la forme
    mini maxi coeff fixe
    0 1 0
    2 5 3
    6 10 5
    11 20 90

    et de calculer la prime par une requête union
    bonjour et merci à tous de vos réponses

    pour reprendre cette proposition, je ne vois pas en pratique comment construire la table proposée ici

    est-ce que vous pourriez m'expliquer svp ?

    merci beaucoup

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    ta problématique
    entre 2 et 5 points : prime = total points X 3
    entre 6 et 10 points : prime = total points x 5
    entre 11 et 20 points : prime = 90
    donc entre 0 et 2 points mini 0 max 2 coeff 0 prime 0
    entre 2 et 5 points mini 2 max 5 coeff 3 prime 0
    entre 11 et 20 points mini 11 max 20 coeff 0 prime 90
    à toi de voir si les bornes sont incluses et à faire les modifs
    il te reste à créer une table avec ces données ensuite tu fais ta requête
    avec nbpoint >(=) mini et <(=) maxi et pour formule (mabase*coeff)+prime

Discussions similaires

  1. Requête avec conditions multiples (OR/AND) sur le même champ
    Par GueloSuperStar dans le forum Langage SQL
    Réponses: 31
    Dernier message: 05/03/2013, 10h42
  2. Requête avec conditions multiples sur le même champ
    Par skerdreux dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/06/2008, 19h15
  3. Requête avec condition
    Par lolo_bob2 dans le forum Access
    Réponses: 1
    Dernier message: 08/06/2006, 19h59
  4. [Requête]Requête avec condition
    Par Miles Raymond dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 23/05/2006, 08h30
  5. Calculs dans une requete avec conditions multiples
    Par Sha1966 dans le forum Access
    Réponses: 3
    Dernier message: 13/01/2006, 15h18

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