2017-07-18 4 views
0

J'ai écrit cet extrait de code ici dans Oracle SQL Developer mais je ne sais pas comment utiliser un CAS QUAND de sorte que lorsque k.QUARANTINED = 0, affichez 'Non' , sinon si k.QUARANTINED = 1 affiche 'Oui'. Cette colonne est toujours 0 ou 1. select s.NAME as "Shipment ID" ,k.STATUS_ID as "Status" ,k.EXPIRATION ,k.DISDATE ,u.SCR_NO as "Patient No" ,k.QUARANTINED ,k.PREVIOUS_STATUS_ID ,k.SORT_KEY as "Sort Order" from KIT k left join SHIPMENT s on s.ID = k.SHIPMENT_ID left join USR u on u.PAT_ID = k.PAT_ID;ETUDE QUAND dans Oracle SQL Developer dans l'instruction de jointure

J'ai essayé plusieurs fois mais j'ai continué à recevoir des erreurs très probablement parce que je ne sais pas comment écrire la syntaxe correctement ou peut-être que je dois réécrire cela complètement différemment? Je voudrais garder l'ordre des colonnes pareil. Je voudrais juste voir 'Oui' ou 'Non' pour k.Quarantined au lieu de 0 ou 1 retourné dans le résultat. :)

Répondre

0
SELECT 
    S.name      AS "shipment ID", 
    K.status_id    AS "status", 
    K.expiration, 
    K.disdate, 
    U.scr_no     AS "Patient No", 
    K.quarantined, 
    CASE k.quarantined 
     WHEN 0 THEN 'No' 
     WHEN 1 THEN 'Yes' 
     ELSE 'Missing or Null' 
    END      AS "quarantine status case example 1", 
    CASE 
     WHEN k.quarantined = 0 
      THEN 'No' 
     WHEN k.quarantined = 1 
      THEN 'Yes' 
     ELSE 'Missing or Null' 
    END      AS "quarantine status case example 2", 
    K.previous_status_id, 
    K.sort_key     AS "sort order", 
FROM Kit K 
LEFT JOIN Shipment S 
    ON K.shipment_id = S.id 
LEFT JOIN USR U 
    ON K.pat_id = U.pat_id 
ORDER BY 
    K.sort_key ASC 
; 

Deux exemples de CAS ci-dessus. Le premier exemple est utilisé lorsque vous évaluez une seule colonne/variable.

Le deuxième exemple est utilisé pour tester plusieurs conditions. Lorsque vous utilisez le second exemple d'instructions CASE, il est important de comprendre que CASE renvoie le résultat de la première condition qui évalue TRUE. Lorsque vous utilisez une logique complexe, un développeur peut parfois avoir (par inadvertance) une logique de chevauchement où plusieurs conditions peuvent être satisfaites. Lorsque des résultats inattendus de CASE se produisent, il est important de revenir en arrière et de réévaluer l'instruction de haut en bas. Si vous êtes absolument sûr que K.quarantined ne peut pas être NULL et qu'il ne peut être que 0 ou un (recherchez la table DDL pour les contraintes de vérification) alors vous pouvez supprimer ou commenter la clause ELSE sur les instructions CASE - mais Il est généralement recommandé de toujours avoir une clause ELSE pour la cohérence. Vous pouvez l'indiquer simplement "ELSE NULL" si vous n'attendez rien d'autre que ce qui est décrit dans votre instruction CASE. Enfin, assurez-vous de vous assurer que K.quarantined est numérique ou texte (consultez la table DDL). Si vous stockez le texte '0' ou '1', vous devriez modifier vos littéraux en conséquence - même si je pense que les versions actuelles d'Oracle sont assez intelligentes pour effectuer les conversions implicites pour vous.