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

SQL Oracle Discussion :

CASE avec un NOT IN


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut CASE avec un NOT IN
    Hello Forum

    Ma requête comporte une variable &&my_period qui est définie au début : soit 202001 soit 202009.

    En fonction de cette variable, je prends les enfants nés avant 2002 ou 2003 de cette manière et cela fonctionne très bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    and per.birth_date_year <     
       case
          when &&my_period = '202001' then 2002
          when &&my_period = '202009' then 2003
       end
    Ma question et mon problème se situe ici : en fonction de cette variable, je dois éviter de prendre les enfants qui suivent un certain enseignement :

    • Si 202001 alors 'C63','C04','C05','C10','C12'
    • Si 202009 alors 'C63','C60','C04','C05','C10','C12'


    Donc, pour le moment, je dois le faire manuellement :
    En 202001 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND leg.qualification NOT IN ('C63','C04','C05','C10','C12')
    En 202009 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND leg.qualification NOT IN ('C63','C60','C04','C05','C10','C12')
    Est-il possible ici aussi d'utiliser un CASE du style et qui fonctionnerait ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AND leg.qualification NOT IN    
       case
          when &&my_period = '202001' then ('C63','C04','C05','C10','C12')
          when &&my_period = '202009' then ('C63','C60','C04','C05','C10','C12')
       end
    J'ai essayé dans tous les sens, avec ou sans ', (,... et rien n'y fait. C'est un peu bête d'avoir automatisé le début et de devoir le faire manuellement pour cette partie.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Tout simplement comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AND (   &&my_period = '202001' AND leg.qualification NOT IN  ('C63','C04','C05','C10','C12')
         OR &&my_period = '202009' AND leg.qualification NOT IN  ('C63','C60','C04','C05','C10','C12')
        )
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Je mettrais des parenthèses en plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AND (   (&&my_period = '202001' AND leg.qualification NOT IN  ('C63','C04','C05','C10','C12'))
         OR (&&my_period = '202009' AND leg.qualification NOT IN  ('C63','C60','C04','C05','C10','C12'))
        )

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Ces parenthèses complémentaires sont juste cosmétiques (donc inutiles) puisque la précédence des opérateurs s'applique.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Eh ben !
    Pourquoi je me torture avec CASE alors que...
    Un grand merci à vous deux !

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Tu peux le gérer directement en OR,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AND( 
    ( &&my_period = '202001' AND  leg.qualification NOT IN  ('C63','C04','C05','C10','C12') )
    OR 
    ( &&my_period = '202009' AND  leg.qualification NOT IN ('C63','C60','C04','C05','C10','C12') )
    )
    Sinon avec CASE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AND 1 = 
       case when &&my_period = '202001' AND  leg.qualification NOT IN  ('C63','C04','C05','C10','C12') THEN 1
          when &&my_period = '202009' AND leg.qualification NOT IN ('C63','C60','C04','C05','C10','C12') THEN 1
    ELSE 0 
       end

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

Discussions similaires

  1. requete avec and not
    Par krfa1 dans le forum Requêtes
    Réponses: 1
    Dernier message: 19/09/2006, 16h39
  2. Prb Insert avec Colonne NOT NULL
    Par Sunny dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/12/2005, 12h59
  3. [PHP-JS] case avec plus et moins a coté
    Par budiste dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2005, 14h09
  4. probleme de case avec un u_short
    Par [thebadskull] dans le forum C
    Réponses: 4
    Dernier message: 06/11/2005, 16h32
  5. Cocher une case avec affichage automatique
    Par Toff !!!!! dans le forum Access
    Réponses: 3
    Dernier message: 27/09/2005, 13h36

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