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 :

Table de traduction et valeur inexistante [11gR2]


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2017
    Messages : 22
    Par défaut Table de traduction et valeur inexistante
    Bonjour,

    j'ai une table traduction qui contient des valeurs dans différentes langues.

    libellé_1 , libellé_2, code_langue

    Dans mon exemple j'affiche la valeur des libellé_1 et libellé_2 en code langue 'EN'
    mais je n'arrive pas à afficher la valeur des libellé_1 et libellé_2 en code langue 'FR' si elle n'existe pas en code langue 'EN'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select libellé_1 , libellé_2 from traduction where code_langue ='EN'
    j’arrive à afficher les langue 'EN' er 'FR' avec un opérateur OR mais je pas seulement la langue 'FR' si seulement si libellé_1 et libellé_2 n’existe pas en code langue 'EN'

    Quand je l’écris ça m’a l’air tellement simple mais je n’y arrive pas ☹

    Pouvez-vous l’aider svp ?

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut

    Ce que vous dites n'a pas de sens ou alors il nous manque des informations

    Que donne la requête ci-dessous ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select code_langue, count(*) from traduction group by code_langue;
    Que donne une requête qui sélectionne les deux langues sur un code traduction précis ?

  3. #3
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2017
    Messages : 22
    Par défaut
    effectivement il manque un champs commun, dsl , c'est dans mon cas un code article sur lequel il y a deux libellés dans differentes langues

    code_article, libelle_1,libelle_2,code_langue

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Dans ce cas, que donne une requête avec sélection uniquement sur le code article (Sélection de toutes les langues donc) ?

  5. #5
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2017
    Messages : 22
    Par défaut
    exactement, cela renvoie le code_article sur toutes les langues

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 371
    Par défaut
    Bonjour,
    Si je comprends bien, tu veux pour un article donné afficher la traduction en EN si elle existe, sinon en FR.
    Dans le cas il faut:
    1. Partir de la table "article"
    2. Chercher la traduction en FR
    3. Chercher, si elle existe, la traduction en EN

    Le point 1 se fait avec une jointure interne, et le point 2 avec une jointure externe.
    Comme la table des tradutions apparait 2 fois dans la requête, il faut utiliser des alias.
    Deux COALESCE dans le SELECT, et c'est réglé.

    Tatayo.

  7. #7
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2017
    Messages : 22
    Par défaut
    ok, merci pour la réponse, je vais essayer

  8. #8
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Tu peux aussi grouper et faire le découpage avec un CASE (ou un DECODE)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH t AS (SELECT 1 article, 'FR' langue, 'lib 1 fr' lib FROM dual
    UNION ALL SELECT 1, 'EN', 'lib 1 en' FROM dual
    UNION ALL SELECT 2, 'EN', 'lib 2 en' FROM dual
    UNION ALL SELECT 3, 'FR', 'lib 3 fr' FROM dual)
    SELECT article, MAX(CASE WHEN langue = 'FR' THEN lib END) libFR, MAX(CASE WHEN langue = 'EN' THEN lib END) libEn,
    			NVL(MAX(CASE WHEN langue = 'EN' THEN lib END), MAX(CASE WHEN langue = 'FR' THEN lib END)) libEN_ou_FR
    FROM t
     
    ARTICLE	LIBFR		LIBEN		LIBEN_OU_FR
    1	lib 1 fr	lib 1 en	lib 1 en
    2			lib 2 en	lib 2 en
    3	lib 3 fr			lib 3 fr

  9. #9
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Septembre 2017
    Messages : 22
    Par défaut
    Yep ! merci McM j'ai opter pour le NVL(MAX(CASE ...
    ça fonctionne parfaitement bien

    je retiens pour la prochaine fois

  10. #10
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 942
    Par défaut
    Bonjour,
    Autre possibilité :
    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
    WITH 
    T AS 
    (SELECT 1 article, 'FR' langue, 'lib 1 fr' lib FROM dual
     UNION ALL SELECT 1, 'EN', 'lib 1 en' FROM dual
     UNION ALL SELECT 2, 'EN', 'lib 2 en' FROM dual
     UNION ALL SELECT 3, 'FR', 'lib 3 fr' FROM dual)
    ,T_Default as
     (Select * FROM T WHERE langue = 'FR')
    ,T_other as 
     (Select * FROM T WHERE langue ='EN')
     
    SELECT   T_Default.article                      AS article
            , coalesce (T_other.lib, T_Default.lib) As lib
    FROM T_Default
        left outer join T_Other on T_Other.article = T_Default.article

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/06/2007, 13h10
  2. Réponses: 5
    Dernier message: 21/05/2006, 13h23
  3. Meilleur type table pour stocker des valeurs numérique
    Par vodevil dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/04/2006, 20h42
  4. Boucler sur une table pour renommer des valeurs
    Par webwhisky dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/01/2006, 14h19
  5. Faire apparaître une valeur inexistante en DB
    Par CyBeRoN dans le forum Langage SQL
    Réponses: 18
    Dernier message: 09/11/2005, 16h05

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