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 :

CASE sur deux colonnes


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    CASE sur deux colonnes
    Bonjour,

    je souhaite appliquer un CASE dans un select , qui verifie la condition sur une colonne et applique le resultat sur une autre.
    exeple : une table A avec 2 colonnes x et y

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    select x,y , case when x='toto' then y='tata' 
    end as ref
    et là message d'erreur : MIssing key world

    j'ai essayé aussi :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    select x,y , case x when 'toto' then y='tata' 
    end as ref

    meme message d'erreur .
    En réalité ma requeteest plus complexe avec des jointure ,
    mais sii quelqu'un peut me montrer un exemple , car sur le réseau , que des exemples classiques , condition / action sur une seule colonne.

    Merci

  2. #2
    Membre chevronné
    Je ne pense pas que dans le SELECT avec un CASE tu puisses affecter une chaîne de caractères à une colonne.
    En clair, la partie "then y='tata'" me semble impossible mais je peux me tromper.

    Quand tu dis "verifie la condition sur une colonne et applique le resultat sur une autre.", tu veux faire un Update de la colonne y et mettre 'tata' dedans quand x = 'toto'?

    Exemple sur dual : exemple simple : si dummy = X alors j'affiche Y.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select dummy, 
    case dummy WHEN 'X' then 'Y' END 
    from dual;
     
    D C
    - -
    X Y
    1 row selected.



    Cas que tu veux faire avec une affectation de colonne (la même) : ça plante --> avec le Case dans un SELECT, on peut afficher un libellé mais pas faire un Update de colonne.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select dummy, 
    case dummy WHEN 'X' then dummy='Y' END 
    from dual;
     
    ORA-00905: mot-clé absent



    Une solution serait plutôt ça.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    update dual set dummy=  case WHEN dummy = 'X' then 'Y' END;


    Mais il ne serait pas plus simple de faire ça? Bien sur dans DUAL il y a une seule ligne mais cet Update est plus simple que de passer par un Case...
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    update dual set dummy='Y' WHERE dummy = 'X' ;
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Membre régulier
    Re
    Merci du retour . Je ne veux pas faire de update, je veux conditionner l'affichage du SELECT; ne pas afficher la valeur de la colonne Y si la colonne X ='tata' par exemple .Avec le CASE , je n'y arrive pas.

  4. #4
    Expert confirmé
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    select x, case when x='toto' then 'tata' else y end as y

  5. #5
    Membre régulier
    Merci à ts les deux .
    Specialement Skutaumad !! c'est exactement ce que je cherchais .
    le
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    select x, case when x='toto' then 'tata' else y end as y
    répond exactement à ma problèmatique; je l'embarque !

  6. #6
    Membre expérimenté
    On peut l’écrire même d'une autre manière

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    select x, case X when 'toto' then 'tata' else y end as y
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

###raw>template_hook.ano_emploi###