2017-07-18 94 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足够聪明,可以为您执行隐式转换。