2017-07-18 10 views
0

このコードは、Oracle SQL Developerで作成しましたが、使用する方法がわかりませんので、k.QUARANTINED = 0と表示すると、 k.QUARANTINED = 1の場合は 'Yes'と表示されます。この列は常に0または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;Oracle SQL Developerのjoin文のケース

私は数回試しましたが、構文を正しく書く方法がわからないか、まったく別の方法で書き直さなければならない可能性が高いため、エラーが発生する可能性があります。私は列の順序を同じにしたいと思います。私は、結果に0または1の代わりにk.Quarantinedの代わりに「Yes」または「No」と表示したいと考えています。 :)

答えて

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 
; 

上記のケースの2つの例。最初の例は、単一の列/変数を評価するときに使用されます。

第2の例は、複数の条件をテストするために使用されます。

CASE文の2番目の例を使用する場合、TRUEを評価する最初の条件の場合にCASEが結果を返すことを理解することが重要です。複雑なロジックを使用する場合、複数の条件を満たすことができるロジックが重複していることがあります(誤って)。 CASEの予期しない結果が発生した場合は、元に戻って文を再評価することが重要です。

K.quarantinedがNULLにできないことが絶対に確かで、それが0または1(検査制約のテーブルDDLを調べる)であることができるなら、CASE文のELSE節を削除またはコメントアウトできます。一貫性のために常にELSE節を持つことは、一般的には良い習慣です。 CASE文に記述されていること以外のことを期待していない場合は、単に "ELSE NULL"と記述することができます。

最後に、K.quarantinedが数値かテキスト(チェック表DDL)かどうかを確認してください。実際にテキスト '0'または '1'が格納されている場合は、それに応じてリテラルを変更する必要があります。現行バージョンのOracleは暗黙の変換を行うほどスマートです。

関連する問題