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

Langage SQL Discussion :

[Oracle 8.1.7] affichage d'un valeur d'un autre champ


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 138
    Points : 70
    Points
    70
    Par défaut [Oracle 8.1.7] affichage d'un valeur d'un autre champ
    OS : Windows
    Base : Oracle 8.1.7

    Bonjour,

    Je voudrais affiché la valeur d'un champ d'une table mais uniquement si un critére est renseigne sinon afficher une valeur par defaut ou une valeur de la table principale.

    Je sais c'est pas tres clair alors je vais essayer par un exemple :

    table a(a1,a2,a3)
    ______a1______a2______a3______
    ______REF1____CLI_____toto_____
    ______REF2____ _____titi_____
    ______REF3____ _____tata_____
    ______REF4____CLI_____tutu_____

    table b(b1,b2)
    ______b1______b2______
    ______REF1____NOM1___
    ______REF2____NOM2___
    ______REF3____NOM3___
    ______REF4____NOM4___

    Apres la selection sur la table a, je voudrais le résultat suivant :
    ______REF1____CLI_____NOM1_____
    ______REF2____ _____titi_____
    ______REF3____ _____tata_____
    ______REF4____CLI_____NOM4_____

    c'est à dire qu'il m'affiche le champs b2 si dans la table a, a2=CLI sinom a3.

    J'ai essayé avec une jointure :
    select a.a1,a.a2,(case when a.a2<>'CLI' then a.a3 else b.b2 end) from a,b where a.a1=b.b1;

    le pb c'est que la jointure que je dois faire est assez complexe et apres les premiers test, je ne retrouve pas tous les enregistrements.

    Alors y a t-il un autre moyen?

    par avance merci

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    CREATE TABLE A
    (
      A VARCHAR2(25),
      B VARCHAR2(25),
      C VARCHAR2(25)
    );
     
    CREATE TABLE B
    (
      A VARCHAR2(25),
      B VARCHAR2(25)
    );
     
    INSERT INTO A VALUES ('REF1', 'CLI', 'TOTO');
    INSERT INTO A VALUES ('REF2', NULL, 'TITI');
    INSERT INTO A VALUES ('REF3', NULL, 'TATA');
    INSERT INTO A VALUES ('REF4', 'CLI', 'TUTU');
     
    INSERT INTO B VALUES ('REF1', 'NOM1');
    INSERT INTO B VALUES ('REF2', 'NOM2');
    INSERT INTO B VALUES ('REF3', 'NOM3');
    INSERT INTO B VALUES ('REF4', 'NOM4');
     
    SELECT A.A, A.B, B.B
    FROM   A,B
    WHERE  A.B = 'CLI'
    AND    A.A = B.A
    UNION
    SELECT A.A, A.B, A.C
    FROM   A,B
    WHERE  NVL(A.B, 'XXX') <> 'CLI'
    AND    A.A = B.A;
    8i SOC94> CREATE TABLE A
    2 (
    3 A VARCHAR2(25),
    4 B VARCHAR2(25),
    5 C VARCHAR2(25)
    6 );

    Table créée.

    8i SOC94>
    8i SOC94> CREATE TABLE B
    2 (
    3 A VARCHAR2(25),
    4 B VARCHAR2(25)
    5 );

    Table créée.

    8i SOC94>
    8i SOC94> INSERT INTO A VALUES ('REF1', 'CLI', 'TOTO');

    1 ligne créée.

    8i SOC94> INSERT INTO A VALUES ('REF2', NULL, 'TITI');

    1 ligne créée.

    8i SOC94> INSERT INTO A VALUES ('REF3', NULL, 'TATA');

    1 ligne créée.

    8i SOC94> INSERT INTO A VALUES ('REF4', 'CLI', 'TUTU');

    1 ligne créée.

    8i SOC94>
    8i SOC94> INSERT INTO B VALUES ('REF1', 'NOM1');

    1 ligne créée.

    8i SOC94> INSERT INTO B VALUES ('REF2', 'NOM2');

    1 ligne créée.

    8i SOC94> INSERT INTO B VALUES ('REF3', 'NOM3');

    1 ligne créée.

    8i SOC94> INSERT INTO B VALUES ('REF4', 'NOM4');

    1 ligne créée.

    8i SOC94>
    8i SOC94> SELECT A.A, A.B, B.B
    2 FROM A,B
    3 WHERE A.B = 'CLI'
    4 AND A.A = B.A
    5 UNION
    6 SELECT A.A, A.B, A.C
    7 FROM A,B
    8 WHERE NVL(A.B, 'XXX') <> 'CLI'
    9 AND A.A = B.A;

    A B B
    ------------------------- ------------------------- -------------------------
    REF1 CLI NOM1
    REF2 TITI
    REF3 TATA
    REF4 CLI NOM4

    4 ligne(s) sélectionnée(s).

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    merci pour ton aide et pour ton explication.

    question bete :
    existe t-il un moyen de recuperer la valeur d'un champ d'une table sans passer par une jointure?

    par exemple :

    de type :

    select a1,a2,(select b1 from b where .....) from a where .....

    bonne reception

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 111
    Points : 28 462
    Points
    28 462
    Par défaut
    Citation Envoyé par Jean-Matt
    existe t-il un moyen de recuperer la valeur d'un champ d'une table sans passer par une jointure?
    par exemple :
    de type :
    select a1,a2,(select b1 from b where .....) from a where .....
    C'est tout à fait possible... même si ce n'est pas toujours optimal

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par al1_24
    C'est tout à fait possible... même si ce n'est pas toujours optimal
    Et surtout ce n'est pas supporté par tous les SGBD ; or, ce forum traite du langage SQL en général.

    Par conséquent, si votre demande est spécifique à Oracle alors postez dans le forum Oracle

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    Merci bcq, je vais posté ma question sur le forum Oracle

    @+

  7. #7
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Citation Envoyé par Jean-Matt
    J'ai essayé avec une jointure :
    select a.a1,a.a2,(case when a.a2<>'CLI' then a.a3 else b.b2 end) from a,b where a.a1=b.b1;
    Il ne faut pas une jointure stricte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT A.A1, A.A2, CASE WHEN A.A2 = 'CLI' THEN B.B2 ELSE A.A3 END
    FROM A, B
    WHERE A.A1 = B.B1 (+)
    Bloon

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    merci a tous pour vos contributions.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/05/2013, 14h37
  2. Réponses: 4
    Dernier message: 22/02/2011, 03h51
  3. [Oracle 8.1.7] affichage d'un valeur d'un autre champ
    Par Jean-Matt dans le forum Oracle
    Réponses: 7
    Dernier message: 01/09/2006, 13h17
  4. champs reprenant la valeur d'un autre champs
    Par tojiji dans le forum Access
    Réponses: 2
    Dernier message: 31/07/2006, 16h40
  5. Réponses: 8
    Dernier message: 22/03/2006, 17h16

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