我在Oracle SQL Developer中编写了这段代码,但我不知道如何使用CASE WHEN,以便当 k.QUARANTINED = 0 时,显示'否& #39;,否则如果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
;
我尝试了几次,但最不可能出现错误,因为我不知道如何正确编写语法或者我必须完全不同地重写它?我希望保持列的顺序相同。我只想看到'是'或者'否'对于k.Quarantined而不是结果中返回的0或1。 :)
答案 0 :(得分: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将返回第一个计算为TRUE的条件的结果。当使用复杂逻辑时,有时开发人员可能(无意中)具有重叠逻辑,其中可以满足多个条件。当CASE发生意外结果时,重要的是返回并从上到下重新评估该语句。
如果您完全确定K.quarantined不能为NULL并且它只能是0或1(研究表DDL以检查约束)那么您可以删除或注释掉CASE语句中的ELSE子句 - 但它一般来说,总是有一个ELSE子句来保持一致性。你可以简单地说明" ELSE NULL"如果除了CASE声明中描述的内容之外,你还没有想到任何其他内容。
最后,请务必确定K.quarantined是数字还是文本(检查表DDL)。如果它实际上是存储文本' 0' 0或者' 1'然后应相应地更改您的文字 - 尽管我认为当前版本的Oracle足够智能,可以为您进行隐式转换。