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

Langage SQL Discussion :

Filtrer en utilisant la valeur d'une variable


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 376
    Points : 199
    Points
    199
    Par défaut Filtrer en utilisant la valeur d'une variable
    Bonjour,

    J'utilise une requête SQL sur une base DB2.
    J'ai une variable à laquelle est affecté une valeur qui va filtrer le résultat de ma requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    &variable = 1;
     
    SELECT *
    FROM matable
    WHERE macolonne = &variable
    Je n'arrive pas à créer une condition qui si &variable n'est pas renseigné alors on ne fait pas le WHERE macolonne = &variable.

    Existe-il en dernier recours un moyen de tout récupérer. Comme si le filtre n'existait pas ? Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    &variable = ALL;
     
    SELECT *
    FROM matable
    WHERE macolonne = &variable
    J'ai trouvé une solution partielle qui est d'utiliser le LIKE mais c'est pas très optimisé. Mais je récupère bien tout du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    &variable = %;
     
    SELECT *
    FROM matable
    WHERE macolonne LIKE &variable
    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 33
    Points
    33
    Par défaut
    Tu appelles ta requête depuis quel langage?

    Tu peux peut etre construire ta requete dynamiquement et inclure la clause WHERE si ta valeur n'est pas null ou vide.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 376
    Points : 199
    Points
    199
    Par défaut
    J'ai essayé d'inclure cette condition : "inclure la clause WHERE si ta valeur n'est pas null ou vide" mais j'ai des erreurs (souci de syntaxe).

    Il n'y a pas une fonction du type ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE macolonne = touteslesvaleurs
    Encore merci

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Vous pouvez faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select *
      from matable
     where case when &variable is null then '1' else macolonne end = coalesce(&variable, '1')

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Plus simple en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
      FROM matable
     WHERE macolonne = coalesce(&variable, macolonne)

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Une autre solution simple est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
      FROM matable
    WHERE 
    ( (&variable IS NULL) 
       OR (macolonne = &variable)
    )

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 376
    Points : 199
    Points
    199
    Par défaut
    Parfait ! Ça fonctionne très bien merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/08/2012, 15h09
  2. Réponses: 9
    Dernier message: 06/06/2011, 13h39
  3. [EVAL] utiliser la valeur d'une variable à partir de son nom
    Par Julien Dufour dans le forum VBA Access
    Réponses: 0
    Dernier message: 24/04/2008, 13h15
  4. Utiliser la valeur d'une variable string
    Par vador972 dans le forum Access
    Réponses: 11
    Dernier message: 14/08/2006, 21h26
  5. Réponses: 15
    Dernier message: 01/05/2006, 12h40

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