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

Oracle Discussion :

IF THEN ELSE imbriqués


Sujet :

Oracle

  1. #1
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut IF THEN ELSE imbriqués
    Bonjour,

    toujours pour ma migration de données (je mettrais developpez.com comme auteur dans les sources des scripts ) je dois convertir des anciennes valeurs selon un code nouveau. Par exemple :
    col_old='X' donner à col_new la valeur 1, sinon lui donner 0
    Avec un decode tout va bien (decode(col_old,'X',1,0) si c'est déconseillé dites-le moi).

    Maintenant j'ai aussi des règles de gestion plus compliquées comme :
    si col_old_A<>'X' ET col_old_B<>'X' ET col_old_C='X' alors donner la valeur 1 à col_new
    si col_old_C='Y' alors donner la valeur 2 à col_new
    sinon donner la valeur null à col_new
    J'ai fait ça comme ça :
    select decode(
    decode(col_old_A,'X','0','1')||decode(col_old_B,'X','0','1')||decode(col_old_C,'X','1','0'),
    '111',1,
    '002',2,
    '012',2,
    '102',2,
    '112',2,
    null)
    from table_old
    mais c'était moche alors j'ai refait ça comme ça :
    select CASE old_col_C
    when 'Y' then '2'
    else decode(
    decode(old_col_A,'X','0','1')||decode(old_col_B,'X','0','1')||decode(old_col_C,'X','1','0'),
    '111','1',
    null)
    end
    from table_old
    Et vous vous auriez fait comment? Est-ce que je passe à côté d'un moyen simple? Au niveau des performances est-ce que c'est acceptable? Merci
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  2. #2
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Tu as commencé avec un CASE c'était très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    select 
       case
          when col_old_A<>'X' and col_old_B<>'X' and col_old_C='X' then
             1 
          when col_old_C='Y' then
             2
          else
             null
       end col_new
    from
    ...


    C'est bcp plus lisible que des DECODE !

    Tu peux même imbriquer les case when ...

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  3. #3
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Pfffff chuis une tare !! J'avais essayé avec des CASE imbriqués mais je les utilisais comme ça :
    case cole_A
    when 'X' then
    case col_B
    when 'X' then ..
    end
    end
    et forcément ça marchait pas du tout !!

    Merci beaucoup ça marche bien et c'est tout propre comme ça !
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

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

Discussions similaires

  1. test si parametre = cide IF THEN ELSE
    Par AODRENN dans le forum SQL
    Réponses: 2
    Dernier message: 26/09/2005, 10h00
  2. [Débutant] if...then...else
    Par jive dans le forum ASP
    Réponses: 5
    Dernier message: 16/09/2005, 15h11
  3. [TagLib] Structure if then else
    Par mush_H dans le forum Taglibs
    Réponses: 5
    Dernier message: 19/07/2005, 16h31
  4. If Then Else
    Par Piout dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 24/02/2005, 17h09
  5. [CR 7] [débutante] pb avec if then else
    Par xs_nady dans le forum Formules
    Réponses: 8
    Dernier message: 28/05/2004, 16h36

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