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 :

If imbriqué dans un case


Sujet :

Langage SQL

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 611
    Points : 359
    Points
    359
    Par défaut If imbriqué dans un case
    Bonjour,

    Je cherche à imbriquer un if dans un case sur une requête sql oracle mais cela ne fonctionne pas.

    Je ne vois pas d'où cela peut provenir :

    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
     select r.name as ressource,
     case nvl(d1.id_department,0) 
     when 0
              if nvl(d.id_department,0) = 0 then 
                   ' '
              else
                   d.name
              end if
     else
              d1.name                   
     end as secteur  
    --d1.name, d.name as secteur
    from resources r 
    left outer join toppdm.resource_tree_item rt
    on r.id_resource = rt.id_resource
    left outer join topsys.department d1
    on rt.id_parent_origin = d1.id_department
    left outer join toppdm.resource_tree_item rt2
    on rt.id_parent_origin = rt2.id_resource_tree_item
    left outer join topsys.department d
    on rt2.id_parent_origin = d.id_department
    where r.type in (2,3)
    and r.name not like '%NPU%'
    J'ai une erreur sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if nvl(d.id_department,0) = 0 then

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 790
    Points
    30 790
    Par défaut
    Citation Envoyé par juju05 Voir le message
    Je ne vois pas d'où cela peut provenir
    Surement du fait que IF n'appartient pas au langage SQL, même chez Oracle

    Ton expression peut s'écrire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    case 
    when nvl(d1.id_department, 0) = 0
        then 
            case
            when nvl(d.id_department, 0) = 0 
                then ' '
            else
                d.name
            end
    else
        d1.name
    end as secteur
    Après réflexion, est-ce que ce ne serait pas tout simplement ça que tu cherches à faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COALESCE(d1.name, d.name, ' ') AS secteur
    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
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    oui.

    ça resterait à valider en ayant connaissance du schéma, mais je pense même qu'on pourrait écrire ceci, bien plus lisible et plus logique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT  r.name as ressource,
        COALESCE(d1.name, d.name, ' ') as secteur
    FROM ...

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

Discussions similaires

  1. [XL-2007] USF label visible : Peut-on imbriquer un select case dans un If
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/03/2014, 11h07
  2. [Débutant] Case imbriqué dans un case
    Par douezz dans le forum VB.NET
    Réponses: 15
    Dernier message: 10/06/2011, 08h55
  3. Tableaux-->faire un roll-over dans une case
    Par gwendy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 23/12/2005, 12h04
  4. Affichage différent selon texte dans une case
    Par pingoo78 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 16h32
  5. Probleme de Jointures imbriquées dans une requête
    Par Crevin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/04/2005, 11h05

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