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 :

CASE dans requête SQL [AC-2000]


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut CASE dans requête SQL
    Bonjour,

    Je suis entrain de créer une requete ou les dates et l'année en cours on leur importance.

    J'ai une expression calculé mais j'aimerais qu'elle prenne une valeur ou un autre celon l'année voulue.
    J'ai tenté ceci mais cela ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Round(([NB_RDV]*Month(Now()))/12,2) AS prorata,
    CASE When [Formulaires]![F_Bilan_obj_superviseur]![XAnnée2]<= year(now() THEN [NB_RDV]
    ELSE Prorata
    END AS
    Je veux donc que si l'année selectionné par l'utilisateur n'est pas l'année en cours nous avons prorata = NB_RDV et dans le cas ou l'année en cours est choisi nous retrouvons l'expression premiere de prorata.

    Merci,
    Manu

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Regarde avec IIF()

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Je vois qu'il y a aussi la possibilité de faire ceci avec un IIF mais je ne comprend pas non plus la syntaxe attendu, si quelqu'un peut m'aider, que ce soit avec un CASE ou IIF je lui en serai reconnaissant.
    Merci,
    Manu

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 90
    Points : 214
    Points
    214
    Par défaut
    Case fonctionne uniquement en SQL, sous MS Access c'est du VBA et il faut donc utiliser IIF. Attention toutefois car une telle requête ne fonctionnera que sous Access et pas en ODBC.

    Syntaxe du IIF (c'est dans MSDN...) :

    Iif, fonction


    Renvoie l'un ou l'autre de deux arguments selon l'évaluation d'uneexpression.

    Syntaxe

    IIf(expr, truepart, falsepart)

    La syntaxe de la fonction IIf comporte lesarguments nommés suivants :

    Élément Description
    expr Expression à évaluer.
    truepart Valeur ou expression renvoyée si la valeur de expr est True.
    falsepart Valeur ou expression renvoyée si la valeur de expr est False.


    Remarques

    La fonction IIf évalue toujours truepart et falsepart, même si elle ne renvoie qu'un seul de ces arguments. Vous devez donc être particulièrement attentif à certains effets secondaires indésirables de cette fonction. Par exemple, si l'évaluation de falsepart engendre une division par zéro, une erreur se produit même si la valeur de expr est True.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Ok,

    J'ai essayé ceci (en voyant que l'on pouvait imbriquer des IIF) mais cela ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf([Année]<='year(now())', NB_RDV,IIf([Année]='year(now())',Round(([NB_RDV]*Month(Now()))/12,2))) AS prorata2
    cela te parait etre corect et possible ?

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Je vous met ma requete complete et je rexplique ce que j'aimerais faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T_Rdv.Société, T_Clients.Segment AS T_Clients_Segment, T_Clients.Login_Commercial AS T_Clients_Login_Commercial, T_Objectifs.NB_RDV, Count(T_Rdv.Société) AS totalRdvEffectué, Sum(Round([Temps_passé]/100,2)) AS [Jours passés], Round([totalRdvEffectué]/[Prorata],2) AS Réalisation, T_Objectifs.Année, Round(([NB_RDV]*Month(Now()))/12,2) as prorata
    FROM ((T_Users INNER JOIN T_Clients ON T_Users.Login_Commercial = T_Clients.Login_Commercial) INNER JOIN T_Objectifs ON T_Users.Login_Commercial = T_Objectifs.Login_Commercial) INNER JOIN T_Rdv ON (T_Clients.Index_Clients = T_Rdv.Index_Client) AND (T_Objectifs.Client = T_Rdv.Société) AND (T_Clients.Nom_Société = T_Rdv.Société)
    WHERE (((T_Rdv.Date_RDV)<=Now()) AND ((Year(Now()))=[Formulaires]![F_Bilan_obj_superviseur]![XAnnée2]))
    GROUP BY T_Rdv.Société, T_Clients.Segment, T_Clients.Login_Commercial, T_Objectifs.NB_RDV, T_Objectifs.Année, Round(([NB_RDV]*Month(Now()))/12,2), T_Users.Segment, T_Users.Segment2, T_Users.Segment3
    HAVING (((T_Clients.Segment)=[Formulaires]![F_Bilan_obj_superviseur]![XSegment]) AND ((T_Objectifs.Année)=[Formulaires]![F_Bilan_obj_superviseur]![XAnnée2]))
    ORDER BY T_Rdv.Société;
    Le problème avec cette requête et que si l'on desire voir le bilan (résultat de la requête) pour les années passées ce n'est pas possible.
    Le champ prorata ne doit pas non plus faire le même calcul.

    Il me faut donc que prorata soit égal à
    NB_RDV dans le cas d'une année passée, et à
    Round(([NB_RDV]*Month(Now()))/12,2) dans le cas de l'année en cour.

    Mon Where sera lui aussi à modifier je supose.
    Merci,
    Manu

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    je veux donc, pour compléter mon précédent message avoir quelque chose comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IF [Formulaires]![F_Bilan_obj_superviseur]![XAnnée2] < year(now())
                Prorata = NB_RDV
    Else if [Formulaires]![F_Bilan_obj_superviseur]![XAnnée2] = year(now())
               Prorta = Round(([NB_RDV]*Month(Now()))/12,2))
    End IF

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 90
    Points : 214
    Points
    214
    Par défaut
    Citation Envoyé par egautier18 Voir le message
    Ok,

    J'ai essayé ceci (en voyant que l'on pouvait imbriquer des IIF) mais cela ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf([Année]<='year(now())', NB_RDV,IIf([Année]='year(now())',Round(([NB_RDV]*Month(Now()))/12,2))) AS prorata2
    cela te parait etre corect et possible ?
    pourquoi mets-tu year(now()) entre cotes ?

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Je dois t'avouer que je n'en ai pas la moindre idée.
    Si je l'enleve la syntaxe est corect ?

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 90
    Points : 214
    Points
    214
    Par défaut
    Oui, si tu mets du code entre cotes, il ne sera pas interprété, ca sera considéré comme une simple chaine de caractères !

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Je les ai en effet enlevé et cela fonctionne.

    Je me permet d'abuser de ton aide. Puis-je mettre un IFF dans le where aussi ?
    Car maintenant j'aimerais que les conditions de mon where :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((T_Rdv.Date_RDV)<=Now()) AND ((Year(Now()))=[Formulaires]![F_Bilan_obj_superviseur]![XAnnée2]))
    puisse se modifier celon l'année comme précédement

    Je m'occuperais de la syntaxe après maintant que ma aidé mais avant je veux savoir si je peux faire quelque chose qui en résumé serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Where
    IF Année=year(now())
                (((T_Rdv.Date_RDV)<=Now()) AND ((Year(Now()))=[Formulaires]![F_Bilan_obj_superviseur]![XAnnée2]))
    Else IF Année < year(now())
                     year([date_Rdv])=[Formulaires]![F_Bilan_obj_superviseur]![XAnnée2]))
    END IF

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    J'ai enfait mis un OR tout bete.

    Merci beaucoup de m'avoir aidé cela me sert enormement pour mon projet.
    Bonne journée
    Encore merci,
    Manu

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

Discussions similaires

  1. [MySQL] Introduire une variable dans requête SQL, insérer des données à la volée
    Par Ronan.f dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 29/04/2006, 22h10
  2. [VB6]Fonction dans requête SQL Access
    Par jean-pierre96 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/04/2006, 19h44
  3. TEdit.Text dans Requête SQL?!?
    Par zarbydigital dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/10/2005, 09h37
  4. [Visual Web] [SJSC] Concaténation dans requête SQL
    Par Original Prankster dans le forum NetBeans
    Réponses: 22
    Dernier message: 15/08/2005, 14h50
  5. ASP et valeur NULL dans requêtes SQL
    Par chuck_m dans le forum ASP
    Réponses: 7
    Dernier message: 13/08/2004, 11h15

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