2017-07-18 38 views
0

我在這裏寫了這段代碼在Oracle SQL Developer中,但我不知道如何使用CASE WHEN,這樣當k.QUARANTINED = 0時,顯示'No' ,否則如果k.QUARANTINED = 1則顯示'是'。此列始終爲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;CASE WHEN在Oracle SQL Developer中加入語句

我嘗試了幾次,但不斷得到錯誤,因爲我不知道如何正確寫入語法,或者我可能必須完全改寫這個完全不同?我想保持列的順序相同。我只想看到k.Quarantined的「是」或「否」,而不是結果中返回的0或1。 :)

回答

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 
; 

以上兩例CASE。第一個示例用於評估單個列/變量。

第二個示例用於測試多個條件。

使用CASE語句的第二個示例時,瞭解CASE將返回評估TRUE的第一個條件的結果很重要。在使用複雜邏輯時,有時開發人員可能(無意)在可滿足多個條件的情況下具有重疊邏輯。如果發生意外的CASE結果,重新從頭到尾重新評估聲明是很重要的。

如果您完全確定K.quarantined不能爲NULL,並且它只能是0或1(研究檢查約束的表DDL),那麼您可以刪除或註釋CASE語句上的ELSE子句 - 但總是有一個良好的做法,始終有一個ELSE子句的一致性。如果您除了CASE語句中描述的內容之外別無他法,您可以簡單地聲明「ELSE NULL」。

最後,一定要確定K.quarantined是數字還是文本(檢查表DDL)。如果它實際上存儲文本'0'或'1',那麼應該相應地更改文字 - 儘管我認爲當前版本的Oracle足夠聰明,可以爲您執行隱式轉換。