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 :

Aide pour une condition dans une requête


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    technicien informatique
    Inscrit en
    Décembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Aide pour une condition dans une requête
    bonjour à tous,

    Voici ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select s.LOWERSPECLIMIT, s.UPPERSPECLIMIT, s.TARGET
    from EDC_PLAN_EDC_SPEC ps, EDC_SPEC s, EDC_PLAN p
    Where p.EDC_PLAN_NAME like 'variable'
    and ps.EDC_PLAN_ID = p.EDC_PLAN_ID
    and ps.EDC_SPEC_NAME = s.EDC_SPEC_NAME
    and s.UPPERSpecLIMIT is not null
    and s.LOWERSPECLIMIT is not null
    order by s.EDC_SPEC_NAME
    Je n'ai pas forcément de valeur dans s.TARGET, du coup je voudrais qu'il me l'affiche uniquement si il est à autre chose que NULL.
    en revanche les s.LOWERSPECLIMIT, s.UPPERSPECLIMIT ne dependent pas de la valeur de s.TARGET

    J'avais essayé de mettre:
    and s.TARGET is not null mais du coup si s;TARGET est à NULL il m'affiche pas les 2 autres valeurs (s.LOWERSPECLIMIT, s.UPPERSPECLIMIT)

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 396
    Points : 39 924
    Points
    39 924
    Billets dans le blog
    9
    Par défaut
    Vous pouvez utiliser un case, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Case when s.TARGET is null
                then 'C NUL !'
                else S.TARGET
                end as MACOLONNE

  3. #3
    Candidat au Club
    Homme Profil pro
    technicien informatique
    Inscrit en
    Décembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Je débute en SQL sans formation, du coup est ce que vous pourriez être plus précis.
    Je ne sais pas trop ou il faut que j'ajoute ce que vous mettez.

    Merci de votre aide

    Cordialement

    Bylbo

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 396
    Points : 39 924
    Points
    39 924
    Billets dans le blog
    9
    Par défaut
    Si je reprend votre requete, ça donne

    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
    select s.LOWERSPECLIMIT, 
           s.UPPERSPECLIMIT, 
           Case when s.TARGET is null
                then 'C NUL !'
                else S.TARGET
                end as MACOLONNE
    from EDC_PLAN_EDC_SPEC ps 
    inner join EDC_SPEC s
       on S.EDC_SPEC_NAME = ps.EDC_SPEC_NAME
    inner join EDC_PLAN p
       on p.EDC_PLAN_ID   = ps.EDC_PLAN_ID  
    Where p.EDC_PLAN_NAME like 'variable%'
      and s.UPPERSpecLIMIT is not null
      and s.LOWERSPECLIMIT is not null
    order by s.EDC_SPEC_NAME
    J'en ai profité pour normaliser les jointures : les critères de jointure sont exprimés par JOIN
    Le where ne sert qu'au filtrage.
    Vous trouverez toutes les explications sur les différentes jointures dans le topic SQL : http://www.developpez.net/forums/d68...q-langage-sql/
    Votre syntaxe avec les jointures dans le where fonctionne toujours, mais elle n'est pas recommandée (sauf quelques exceptions genre access qui gère très mal la nouvelle syntaxe)
    Edit : je n'y avais pas prêté attention initialement, mais il manquait le % dans votre prédicat like, je viens de l'ajouter

  5. #5
    Candidat au Club
    Homme Profil pro
    technicien informatique
    Inscrit en
    Décembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci pour les corrections d'écritures.

    En revanche ça ne fait pas ce que je voudrais, car j'ai toujours une troisième colonne que je ne veux pas quand le résultat est null.

    Même sans mettre le code que vous m'avez donné, j'ai le même résultat.

    Je cherche à remonter uniquement la colonne si j'ai autre chose que null, car je veux utiliser ma requête dans Excel pour d'autre chose et je ne veux pas remonter des infos qui ne me servent pas.

    Merci

    Cordialement

    Bylbo

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 396
    Points : 39 924
    Points
    39 924
    Billets dans le blog
    9
    Par défaut
    Ca ce n'est pas possible, le nombre de colonnes est fixe, piloté par le SELECT
    Par contre, vous pouvez tricher en faisant comme ceci :
    - Si la colonne UPPERSPECLIMIT est de type alphanumérique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select s.LOWERSPECLIMIT, 
           Case when s.TARGET is null
                then s.UPPERSPECLIMIT
                else s.UPPERSPECLIMIT !! ' '!! S.TARGET
                end as MACOLONNE
    from EDC_PLAN_EDC_SPEC ps 
    inner join EDC_SPEC s
       on S.EDC_SPEC_NAME = ps.EDC_SPEC_NAME
    inner join EDC_PLAN p
       on p.EDC_PLAN_ID   = ps.EDC_PLAN_ID  
    Where p.EDC_PLAN_NAME like 'variable%'
      and s.UPPERSpecLIMIT is not null
      and s.LOWERSPECLIMIT is not null
    order by s.EDC_SPEC_NAME
    - Si la colonne UPPERSPECLIMIT est de type numérique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select s.LOWERSPECLIMIT, 
           Case when s.TARGET is null
                then char(s.UPPERSPECLIMIT)
                else char(s.UPPERSPECLIMIT) !!' '!! S.TARGET
                end as MACOLONNE
    from EDC_PLAN_EDC_SPEC ps 
    inner join EDC_SPEC s
       on S.EDC_SPEC_NAME = ps.EDC_SPEC_NAME
    inner join EDC_PLAN p
       on p.EDC_PLAN_ID   = ps.EDC_PLAN_ID  
    Where p.EDC_PLAN_NAME like 'variable%'
      and s.UPPERSpecLIMIT is not null
      and s.LOWERSPECLIMIT is not null
    order by s.EDC_SPEC_NAME
    Selon votre SGBD la concaténation se fait avec !! ou + ou le mot clef CONCAT

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/10/2015, 09h43
  2. Réponses: 3
    Dernier message: 13/09/2015, 20h21
  3. Réponses: 1
    Dernier message: 21/01/2011, 11h17
  4. Réponses: 1
    Dernier message: 26/11/2007, 09h26
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 14h48

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