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

SQL Oracle Discussion :

Oracle 10 g - Jointure particulière avec CASE WHEN ?


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut Oracle 10 g - Jointure particulière avec CASE WHEN ?
    Bonjour,

    Je souhaite effectuer l'action suivante :

    J'ai une table de 500 lignes T1 qui a un code C_NUM_COMPTE faisant référence à une table T2(C_NUM_COMPTE, C_NUMERO_COMPTE).

    Exemple table T2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    C_NUM_COMPTE C_NUMERO_COMPTE
    1                     71245678978
    2                     62478987878
    3                     62478987879
    ...
    Exemple de table T1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MONTANT C_NUM_COMPTE 
    123.45     1
    1478.45   2
    ...
    Ce que je souhaite faire c'est pour tous les compte dont le code réél commence par 6, par exemple les n° 2 et 3, je multiplie par -1 les montants de ma table T1.

    Ce qui donne pour T1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MONTANT C_NUM_COMPTE 
    123.45      1
    -1478.45   2
    ...
    Est-ce possible en requêtes SQL sous Oracle 10g ?

    Merci pour toute info.

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECODE(substr(TO_CHAR(num_code),1,1), '6', -1,1) * montant
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Points : 148
    Points
    148
    Par défaut
    Salut,

    Merci, c'est puissant cette fonction DECODE !

    Voilà donc ma requête qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DECODE(substr(TO_CHAR(T2.C_NUMERO_COMPTE),1,1), '6', -1,1) * T1.MONTANT FROM COMPTE T2, AGREG T1 WHERE T1.C_NUM_COMPTE = T2.C_NUM_COMPTE
    Pour être plus exact c'est une mise à jour que je veux faire donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE (SELECT T1.MONTANT AS old_value, DECODE(substr(TO_CHAR(T2.C_NUMERO_COMPTE),1,1), '6', -1,1) * T1.MONTANT AS new_value FROM COMPTE T2, AGREGATION T1 WHERE T1.C_NUM_COMPTE = T2.C_NUM_COMPTE AND T1.MONTANT IS NOT NULL) SET old_value = new_value;

  4. #4
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut


    1) Il ne sert à rien d'accéder à COMPTE (car c_numero_compte est deja dans AGGREGATION)
    2) Ta syntaxe est complétement.... exotique
    Faire tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE agregation
       SET montant =
                montant
              * DECODE (SUBSTR (TO_CHAR (c_numero_compte), 1, 1), '6', -1, 1)
     WHERE montant IS NOT NULL
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Non Garuda, regardes bien les données du premier post :
    num_compte est un number 1 à 7 par exemple
    numero_compte est le n° du compte à 11 chiffres. C'est sur celui là qu'on fait le substr.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Ok, mea culpa !!

    ( confusion entre c_numero_compte et c_num_compte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE agregation
    SET montant =
                 montant
               * (SELECT DECODE (SUBSTR (TO_CHAR (c_numero_compte), 1, 1),'6', -1,1)
                FROM compte
                WHERE compte.c_num_compte = agregation.c_num_compte)  
    WHERE montant IS NOT NULL
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

Discussions similaires

  1. Problème avec case when
    Par kodo dans le forum Développement
    Réponses: 5
    Dernier message: 20/12/2011, 15h35
  2. DISTINCT d'un champ combiné avec CASE WHEN
    Par ninikkhuet dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/05/2010, 15h13
  3. [SQL SERVER 2005] INSERT avec CASE WHEN
    Par djilos dans le forum Développement
    Réponses: 5
    Dernier message: 16/04/2010, 14h46
  4. Requête avec Case When ..
    Par Passarinho44 dans le forum Langage SQL
    Réponses: 20
    Dernier message: 08/08/2008, 16h03
  5. Pb avec case when !
    Par Brice Yao dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/08/2005, 08h20

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