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 :

Des conditions dans une requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut Des conditions dans une requête
    bonjour,
    mon probleme est le suivant:
    grace a une requete, je voudrai calculer un montant en fonction d'une duree.
    pour cela je voudrai effectuer l'algorithme suivant

    si duree<30 alors montant=0 sinon
    si duree<60 et duree>30 alors montant=1 sinon
    si duree<90 et duree>60 alors montant=2 sinon
    si duree<120 et duree>90 alors montant=4 sinon
    si duree <4320 et duree>120 alors montant=4+4*((duree-120)/30)
    sinon montant=150

    "duree" est une valeur connu mais "montant" correspond au resultat que je dois obtenir et du coup je ne sais pas comment m'y prendre.
    je ne vois pas comment lui faire comprendre a quoi correspond "montant" dans ma formule.
    je ne sais pas si je suis tres claire?
    de plus je ne suis meme pas sur de pouvoir utiliser des if. j'ai cherche quand on clique droit puis creer(generateur d'expression), mais il n'y avait pas de if. J'ai teste en le tapant quand meme mais ca ne marche pas.

    si vous pouvez m'aider

    merci

  2. #2
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour....

    Par une requête..je ne sais pas trop....
    ....mais calculer le montant directement par code.....c'est beaucoup mieux....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Select Case duree
         Case < 30
              montant = 0
         Case 30 To 59
              montant = 1
         Case 60 To 89
              montant = 2
         .......
              .........
     
         Case Else
              montant = 150
    End Select
    ..à tester.....
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  3. #3
    Membre expérimenté

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir,
    Citation Envoyé par pierrOPSG Voir le message
    si vous pouvez m'aider
    Si...On peut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TaTable.duree, IIf([duree]<=30,0,IIf([duree] Between 31 And 60,1,IIf([duree]
                Between 61 And 90,2,IIf([duree] Between 91 And 120,4,IIf([duree]
                Between 121 And 4320,4+4*(([duree]-120)/30),150))))) AS Montand
    FROM TaTable;
    Traduction generateur d'expression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Montand: VraiFaux([duree]<=30;0;VraiFaux([duree] Entre 31 Et 60;1;
    VraiFaux([duree] Entre 61 Et 90;2;VraiFaux([duree] Entre 91 Et 120;4;
    VraiFaux([duree] Entre 121 Et 4320;4+4*(([duree]-120)/30);150)))))
    Cordialement.
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  4. #4
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut à tous,

    il vaut mieux utiliser switch():
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Table1.duree, Switch(([duree]<30),(0),([duree]>=30 And [duree]<60),(1),([duree]>=60 And [duree]<90),(2),([duree]>=90 And [duree]<120),(4),([duree]>=120 And [duree]<4320),4+4*(([duree]-120)/30),True,150) AS montant
    FROM Table1;


  5. #5
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut probleme de format
    merci pour vos reponses,
    cependant j'ai toujours un probleme,
    en faite ma duree est en format heure abrege du cout 3omin apparait 00:30 et 60min apparait 01:00 et 90min apparait 01:30
    du coup dans le code il ne reconnait pas les valeurs que j'associe a ma duree.
    j'ai essaye de remplacer 30 par 00:30 mais bien sur ca ne marche pas,
    je ne sais pas comment faire.

    si quelqu'un pouvait m'expliquer...

    merci

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Avec un champ type date/heure on encadre la valeur avec des dièses.
    30min s'écrit #00:30:00#
    1H00 s'écrit #01:00:00#
    ...
    24H00 s'écrit #1/1/1900#
    4320min (3 jours) s'écrit #1/3/1900# en sql (mm/jj/aaaa)
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ou #03/01/1900# dans une requête en mode création si le format date de windows est jj/mm/aaaa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT TaTable.duree, 
       Switch([Duree]<#00:30:00#,0,
              [Duree]<#01:00:00#,1,
              [Duree]<#01:30:00#,2,
              [Duree]<#02:00:00#,4,
              [Duree]<#1/3/1900#, 4+4*datediff("n", #02:00:00#, [Duree])/30,
              True,150) AS Montant
    FROM TaTable;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datediff("n", #02:00:00#, [Duree])
    renvoie un nombre exprimant la différence en minutes entre [duree] et 120min

    A+

  7. #7
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    merci beaucoup pour la reponse!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/03/2012, 12h56
  2. [MySQL] Mettre des conditions dans une requête mysql avec pdo
    Par shima5 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/10/2010, 21h11
  3. Peut on insérer une condition dans une requête ?
    Par MITCH31 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 22/09/2005, 18h26
  4. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24
  5. Condition dans une requête
    Par fdloisel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2004, 16h55

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