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 370
    Points
    2 370
    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

  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.

  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 370
    Points
    2 370
    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 !

+ 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, 09h00
  2. [Débutant] if...then...else
    Par jive dans le forum ASP
    Réponses: 5
    Dernier message: 16/09/2005, 14h11
  3. [TagLib] Structure if then else
    Par mush_H dans le forum Taglibs
    Réponses: 5
    Dernier message: 19/07/2005, 15h31
  4. If Then Else
    Par Piout dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 24/02/2005, 16h09
  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, 15h36

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