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

MS SQL Server Discussion :

un CASE dans un WHERE...


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut un CASE dans un WHERE...
    Re-salut,

    décidément j'en demande beaucoup aujourd'hui, mais la c'est un poil plus recherché que ma demande précédente.
    Je cherche en gros à mettre un CASE dans un WHERE, ce qui, bien évidemment, ne rime à rien.
    Néanmoins l'idée est la suivante : je voudrais ramener ca

    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
     
     
    select 
    am0.titulaire, am0.var5, 
    hi0.status, count(*) 
    from 
    SYSADM.hi0 hi0, SYSADM.hi3 hi3, SYSADM.am0 am0, SYSADM.hi00 
    where 
    am0.titulaire = hi3.personne 
    and 
    hi0.ref = hi00.code 
    and 
    hi3.hi0_nrid = hi0.nrid 
    and 
    hi0.ref like '%FUP%' 
    and 
    am0.titulaire like '%'
    and 
    CASE (hi0.status) WHEN 'To do' THEN hi0.date_deb>=DATEADD(month,-12,getdate())
    ELSE hi0.faitle>=DATEADD(month,-12,getdate()) 
    and 
    CASE (hi0.status) WHEN 'To do' THEN hi0.date_deb<=getdate()
    ELSE hi0.faitle<=getdate() 
    and 
    am0.template is null and hi0.template is null
    group by am0.titulaire, am0.var5, hi0.status
    C'est à dire que ma clause WHERE portera sur des colonnes différentes selon la valeur d'une colonne.

    Savez vous comment je pourrais procéder ?

    Merci !!

    EDIT : Je précise que je n'ai pas le droit d'utiliser d'UNION pour des raisons un peu complexes à expliquer, je ne dois faire qu'un seul select

  2. #2
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Bonjour,
    Ton double case ne revient-il pas juste à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (
    	(hi0.STATUS='To do' and hi0.date_deb>=DATEADD(month,-12,getdate() and hi0.date_deb<=getdate())
    or
    	(hi0.STATUS!='To do' and hi0.faitle>=DATEADD(month,-12,getdate() and hi0.faitle<=getdate())
    )
    Cordialement
    Pinocchio

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut
    Si ca revient à ca, mais pour les memes raisons que pour l'UNION, je n'ai pas le droit d'utiliser cette syntaxe :'(
    En fait le DATEADD(month,-12,getdate()) c'est une valeur utilisée pour les tests, mais en réalité c'est une valeur récupérée en sortie d'un prompt.
    A la place de DATEADD dans ma vraie requete, j'ai la syntaxe d'appel du prompt. Donc ce DATEADD ne doit apparaître qu'une seule fois !
    Sinon le prompt est appelé en double

  4. #4
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    Tu peux utiliser une variable pour stocker la valeur de la date, et utiliser ta variable plusieurs fois dans la requête

Discussions similaires

  1. Procédure stockée : clause CASE dans mon WHERE ?
    Par ridokou dans le forum Développement
    Réponses: 5
    Dernier message: 27/05/2011, 13h55
  2. CASE dans un WHERE avec un IN()
    Par seb.49 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/08/2010, 12h21
  3. utilisation d'un case dans un where
    Par stephyugh dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/10/2007, 17h31
  4. Problème de syntaxe d'un CASE dans un WHERE?
    Par Danny Blue dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/04/2007, 23h18
  5. [t-sql] instruction CASE dans clause WHERE
    Par ignitionflip dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/01/2007, 18h07

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