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 :

Commande “CASE … WHEN …” [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut Commande “CASE … WHEN …”
    Bonsoir a tous
    Je cherche le moyen d’insérer la commande “CASE … WHEN …” dans une requête,

    Malheureusement j’ai un message
    erreur de syntaxe opérateur absent 
    CASE PecartPREVreelle
          WHEN >'0.2' THEN '2'
          WHEN <'0.2' THEN '1'
          ELSE '0'
        END
    
    Voici ma requete
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT TABaff.NUMaff, TABaff.TYPetd, TABaff.INTaff, TABaff.RESaff, TABaff.LOCaff, TABstat.CODstat, Sum(TABetu.DEVetu) AS SommeDeDEVetu, Sum(TABetu.FACetu) AS SommeDeFACetu, RsomPaff.SommeDeHEURE, Sum(TABbud.HTTbud) AS SommeDeHTTbud, [SommeDeFACetu]-[SommeDeDEVetu] AS Edev_fac, [SommeDeHTTbud]-[SommeDeHEURE] AS EhPREV_hREEL, Sum([SommeDeHEURE]*[TABbud]![THTbud]) AS DepREEL, ([SommeDeHEURE]-[SommeDeHTTbud])/[SommeDeHTTbud] AS PecartPREVreelle, TABaff.DATsyn, TABaff.CAUaff, TABaff.DATarch, TABaff.BOITarch,
    CASE PecartPREVreelle
          WHEN >'0.2' THEN '2'
          WHEN <'0.2' THEN '1'
          ELSE '0'
        END
    FROM TABstat INNER JOIN ((((TABaff LEFT JOIN RsomPaff ON TABaff.NUMaff = RsomPaff.NUMaff) INNER JOIN TABcde ON TABaff.NUMaff = TABcde.AFFcde) LEFT JOIN TABbud ON TABcde.IDcde = TABbud.CDEbub) LEFT JOIN TABetu ON TABcde.IDcde = TABetu.CDEetu) ON TABstat.IDstat = TABaff.STATaff
    GROUP BY TABaff.NUMaff, TABaff.TYPetd, TABaff.INTaff, TABaff.RESaff, TABaff.LOCaff, TABstat.CODstat, RsomPaff.SommeDeHEURE, TABaff.DATsyn, TABaff.CAUaff, TABaff.DATarch, TABaff.BOITarch;
    Merci pour le coup de pouce

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Bonjour,

    Ça c'est du code sql oracle...
    En Access on a Switch qui ressemble

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    bonsoir
    merci pour la réponse
    Avez vous des exemples car je ne trouve rien
    Merci

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 801
    Points : 14 869
    Points
    14 869
    Par défaut
    bonsoir,
    Switch accepte jusqu'à 15 conditions
    en mode SQL:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    Switch([PecartPREVreelle]>0.2,2,[PecartPREVreelle]<0.2,1,True,0)
    True est équivalent au Else.
    En français dans l'interface de création de requêtes, il remplace la virgule par le point-virgule et le séparateur de décimales par le séparateur local:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    PremVrai([PecartPREVreelle]>0,2;2;[PecartPREVreelle]<0,2;1;Vrai;0)

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    Bonsoir et merci cela fonctionne
    J'avais une dernière question, je voulais savoir si il était possible de mettre une chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [PecartPREVreelle] Entre <=0,2 Et >0;+20%
    J'ai essayé de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PremVrai([PecartPREVreelle]>0,2;>+20%;[PecartPREVreelle] Entre <=0,2 Et >0;+20%;[PecartPREVreelle] Entre <0 Et >=-0,2;-20%;[PecartPREVreelle]<-0,2;<-20%;Vrai;0)
    Malheureusement j'ai le message
    La syntaxe de l'expression entrée n'est valide
    Est ce possible?

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    la bonne syntaxe est "[x] Entre Mini et Maxi" avec mini et maxi compris dans les limites (>= et <=):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [PecartPREVreelle] Entre 0 Et 0,2;+20

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 801
    Points : 14 869
    Points
    14 869
    Par défaut
    bonsoir,

    de plus, >+20% est un littéral il faudrait donc mettre l'expression entre guillemets: ">+20%"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PremVrai([PecartPREVreelle]>0,2;">+20%";[PecartPREVreelle] Entre 0,2 Et 0,01;"+20%";[PecartPREVreelle] Entre -0,01 Et -0,2;"-20%";[PecartPREVreelle]<-0,2;"<-20%";Vrai;"0")

  8. #8
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    Bonsoir tee_grandbois
    merci pour votre intérêt
    Vous avez été plus rapide que moi, car je viens juste de trouver mon erreur pour
    de plus, >+20% est un littéral il faudrait donc mettre l'expression entre guillemets: ">+20%"
    J'ai maintenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PremVrai([PecartPREVreelle]>0,2;">+20%";[PecartPREVreelle] Entre 0,01 Et 0,2;"+20%";[PecartPREVreelle]=0;0;[PecartPREVreelle] Entre -0,2 Et -0,01;"-20%";[PecartPREVreelle]<-0,2;"<-20%";Vrai;"-")
    Merci a tous pour le coup de main

    Bonne soirée

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

Discussions similaires

  1. Update un champ avec une ligne de commande select case when
    Par ConsultantSage100 dans le forum Développement
    Réponses: 1
    Dernier message: 14/06/2018, 19h21
  2. Erreur sur commande CASE WHEN
    Par E. Nigma dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/02/2018, 16h13
  3. Pb avec case when !
    Par Brice Yao dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/08/2005, 08h20
  4. Structure CASE WHEN en Interbase
    Par tchaman dans le forum InterBase
    Réponses: 8
    Dernier message: 13/12/2004, 16h18
  5. [SQL] performances Decode ou Case when ?
    Par Yorglaa dans le forum Oracle
    Réponses: 8
    Dernier message: 01/10/2004, 15h50

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