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 :

Decode et résultat


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Par défaut Decode et résultat
    Bonjour à tous,

    J'exécute actuellement une requête de ce type là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  decode(a.taux,null,'1',a.taux)
    FROM table_taux a
    WHERE (a.date_taux = '05-dec-2008')
      AND (a.monnaie = 'EUR')
    Mais le problème est lorsque, pour une monnaie donnée,
    il n'y a pas d'entrée dans la base, je n'arrive pas à afficher
    le nombre 1 (grace à la fct "decode" d'oracle).

    Merci d'avance

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Essaie ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  nvl(a.taux,'1') taux
    FROM table_taux a
    WHERE (a.date_taux = '05-dec-2008')
      AND (a.monnaie = 'EUR')
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  case when a.taux is null then  '1' else a.taux end  taux
    FROM table_taux a
    WHERE (a.date_taux = '05-dec-2008')
      AND (a.monnaie = 'EUR')

  3. #3
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Sous Oracle 10

    Code SQL : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    CREATE TABLE TABLE_TAUX
    (
      DATE_TAUX  DATE,
      TAUX       NUMBER,
      MONNAIE    VARCHAR2(20 )
    )
     
    ;
     
     
    Insert into TABLE_TAUX
       (DATE_TAUX, TAUX, MONNAIE)
     Values
       (TO_DATE('12/08/2008 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0.2722, 'AED');
    Insert into TABLE_TAUX
       (DATE_TAUX, TAUX, MONNAIE)
     Values
       (TO_DATE('12/08/2008 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 1, 'USD');
    Insert into TABLE_TAUX
       (DATE_TAUX, TAUX, MONNAIE)
     Values
       (TO_DATE('12/08/2008 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 1, 'BSD');
     
    Insert into TABLE_TAUX
       (DATE_TAUX, TAUX, MONNAIE)
     Values
       (TO_DATE('12/08/2008 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0.2994, 'ARS');
    Insert into TABLE_TAUX
       (DATE_TAUX, TAUX, MONNAIE)
     Values
       (TO_DATE('12/08/2008 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0.6492, 'AUD');
    Insert into TABLE_TAUX
       (DATE_TAUX, TAUX, MONNAIE)
     Values
       (TO_DATE('12/08/2008 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 0.6665, 'BGN');
    Insert into TABLE_TAUX
       (DATE_TAUX, TAUX, MONNAIE)
     Values
       (TO_DATE('12/08/2008 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 2.6532, 'BHD');


    Citation Envoyé par salim11 Voir le message
    Essaie ce code
    [code]
    SELECT nvl(a.taux,'1') taux
    FROM table_taux a
    WHERE (a.date_taux = '08-dec-2008')
    AND (a.monnaie = 'XXX')

    SELECT decode(taux,NULL,'1',taux)
    2 FROM table_taux a
    3 WHERE (a.date_taux = '08-dec-2008')
    4 AND (a.monnaie = 'XXX');

    no rows selected





    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  case when a.taux is null then  '1' else a.taux end  taux
    FROM table_taux a
    WHERE (a.date_taux = '05-dec-2008')
      AND (a.monnaie = 'EUR')



    SELECT case when a.taux is null then '1' else a.taux end taux
    2 FROM table_taux a
    3 WHERE (a.date_taux = '05-dec-2008')
    4 AND (a.monnaie = 'EUR');
    SELECT case when a.taux is null then '1' else a.taux end taux
    *
    ERROR at line 1:
    ORA-00932: inconsistent datatypes: expected CHAR got NUMBER



    Peut etre la solution est de passer
    par une table intermediaire qui contient la liste des monnaies

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE LISTE_MONNAIE
    (
      MONNAIE   VARCHAR2(35 BYTE)                   NOT NULL,
      NOM_LONG  VARCHAR2(40 BYTE)
    )
    ;


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select decode(taux,null,1) taux, m.monnaie
        from table_taux t
        right outer join liste_monnaie m
        on t.monnaie=m.monnaie
        where M.monnaie='XXX';

    TAUX MONNAIE
    ---------- -----------------------------------
    1 XXX

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Par défaut
    Bonjour à tous,

    J'ai essayé via la table intermédiaire puisqu'elle existe déjà mais rien n'y fait, je n'arrive pas à récupérer 1 lorsque je n'ai pas de taux de change pour une monnaie.

    Merci

  5. #5
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    quelle version Oracle tu as ?

    quelle commande tu as lancé pour faire la requete avec la table intermediare

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Citation Envoyé par yaya0057 Voir le message
    J'ai essayé via la table intermédiaire puisqu'elle existe déjà mais rien n'y fait, je n'arrive pas à récupérer 1 lorsque je n'ai pas de taux de change pour une monnaie.
    Pouvez-vous nous indiquer la requête que vous avez écrite avec la table intermédiaire ?

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Par défaut
    Ma version d'oracle 10g (10.2.0.1.0) et mes requêtes testes sont les suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT decode(a.taux,NULL,1,a.taux) taux, b.code
        FROM taux_change a
        RIGHT OUTER JOIN monnaie b
        ON a.ccy_code = b.code
        WHERE b.code = 'GBP'
        AND (a.taux_date = '05-dec-2008')
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  nvl(a.taux,'1') taux
    FROM taux_change a
    WHERE (a.taux_date = '05-dec-2008')
      AND (a.ccy_code = 'GBP')
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT decode(a.taux,null,'1',a.taux)
    FROM taux_change a
    WHERE (a.taux_date = '05-dec-2008')
      AND (a.ccy_code = 'GBP')
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT case when a.taux IS NULL then 1 else a.taux end taux
    FROM taux_change a
    WHERE (a.taux_date = '05-dec-2008')
      AND (a.ccy_code = 'GBP')

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

Discussions similaires

  1. Decode avec résultats concaténés dans une même chaine
    Par justinedr71 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 08/08/2011, 09h53
  2. Encode - Decode : probleme, résultats différent.
    Par barok dans le forum Administration
    Réponses: 1
    Dernier message: 26/08/2005, 10h43
  3. Réponses: 3
    Dernier message: 18/05/2003, 00h16
  4. Réponses: 4
    Dernier message: 28/09/2002, 00h00
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

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