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 :

CASE avec ELSE à rallonge


Sujet :

Langage SQL

  1. #1
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Points : 287
    Points
    287
    Par défaut CASE avec ELSE à rallonge
    Encore moi,

    J'ai un CASE avec un WHEN à rallonge, dans le THEN je veux qu'il me donne 0, et dans le ELSE je veux qu'il me donne la valeur en question.
    En clair :

    CASE
    WHEN (Expression à rallonge) IS NULL
    THEN 0
    ELSE (Expression à rallonge)
    END

    L'expression à rallonge contient une sous-interrogation contenant un autre CASE et un predicat avec une sous-interrogation... bref, ce que j'appelle "Expression à rallonge".
    Si cette "Expression à rallonge" est NULL, je veux qu'il me ramène 0.
    Jusque là ça marche, mon problème est que je dois lui dire de me ramener le résultat de cette "Expression à rallonge" dans le ELSE.
    Faut-il vraiment réécrire cette "Expression à rallonge" après le ELSE, ou y-a-t-il une manière d'écrire pour l'éviter.
    J'ai bien pensé à utiliser un alias "AS titi", mais quand je lui dit "ELSE titi", il me répond que la colonne titi n'existe pas.

    Quelqu'un aurait-il une idée? Merci d'avance.

  2. #2
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    Question simple
    Réponse simple: oui

    Tu peux aussi mettre cette expression a rallonge dans une CTE...
    Si tu nous mets ton code complet on pourra peut être t'aider.
    Juvamine

  3. #3
    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,
    Ton case when réinvente le coalesce.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COALESCE(Expression à rallonge,0)
    La fonction normalisé est coalesce, selon les SGBD il peut aussi s'appeler NVL (oracle), Nz( Access), ISNULL (fort mal nommé pour SQL SErver mais SQL server implemente aussi COALESCE),etc

    Cordialement
    Soazig

  4. #4
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Points : 287
    Points
    287
    Par défaut
    Eh ben merci, à priori ça me suffit, je ne connaissais pas les CTE.

    J'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH RESUT_CASE(result)
    AS 
    ( 
    Expression à rallonge
    )
     
    SELECT
    CASE
    WHEN (RESUT_CASE) IS NULL
    THEN 0
    ELSE (SELECT result FROM RESUT_CASE)
    END
    et, en tout cas, ça marche bien, si quelqu'un connaît une manière plus optimisée, je suis preneur...

    Merci juvamine

    J'avias bien pensé au COALESCE, mais je ne crois pas que cela convienne car il faut que je gère une condition : si c'est NULL alors je veux 0, sinon je veux la valeur.

  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 383
    Points
    18 383
    Par défaut
    Citation Envoyé par od.dev Voir le message
    J'avias bien pensé au COALESCE, mais je ne crois pas que cela convienne car il faut que je gère une condition : si c'est NULL alors je veux 0, sinon je veux la valeur.
    C'est EXACTEMENT le but de la fonction coalesce.

  6. #6
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Points : 287
    Points
    287
    Par défaut
    Ah ben ouai, ça marche.

    En fait c'est exactement ce que je cherchais.
    Je ne sais plus pourquoi je bloquais sur ce COALESCE

    Merci à tous, encore des tas de trucs appris !

  7. #7
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    2 cours en 1...

    un tit dernier: avec SQLSERVER la fonction ISNULL est équivalente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ISNULL(code_machin, 0) from truc
    Cordialement
    juvamine
    Juvamine

  8. #8
    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,
    J'avais écrit que SQL server avait ISNULL et COALESCE, mais que je trouvais ISNULL mal nommé car on pouvait pensait qu'il renvoyait un booléen si la zone etait nulle.
    De toute façon, puisque la fonction standard existe sous SQL server autant l'utiliser.
    Cordialement
    Soazig

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

Discussions similaires

  1. If /Else & Switch case avec plusieurs paramètres
    Par ralek dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 07/07/2010, 19h28
  2. [PHP 5.0] colorer une case avec if et else
    Par bob633 dans le forum Langage
    Réponses: 6
    Dernier message: 08/03/2010, 11h04
  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