Oracle 中的 CASE WHEN SQL Developer in join 语句
CASE WHEN in Oracle SQL Developer in join statement
我在 Oracle SQL Developer 中编写了这段代码,但我不知道如何使用 CASE WHEN 以便 k.QUARANTINED = 0, 显示 'No', 否则如果 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
;
我尝试了几次,但很可能一直出现错误,因为我不知道如何正确编写语法,或者我可能必须以完全不同的方式重写它?我想保持列的顺序相同。我只想看到 k.Quarantined 的 'Yes' 或 'No' 而不是结果中返回的 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,
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的两个例子。当您评估单个 column/variable.
时使用第一个示例
第二个例子用于测试多个条件。
使用 CASE 语句的第二个示例时,重要的是要了解 CASE 将 return 第一个条件的计算结果为 TRUE。当使用复杂的逻辑时,有时开发人员可能(不经意地)具有可以满足多个条件的重叠逻辑。当 CASE 出现意外结果时,返回并自上而下重新评估语句很重要。
如果您绝对确定 K.quarantined 不能为 NULL 且只能为 0 或 1(研究 table DDL 以了解检查约束),那么您可以删除或注释掉 ELSE 子句在 CASE 语句上——但通常好的做法是总是有一个 ELSE 子句以保持一致性。如果除了您的 CASE 语句中描述的内容之外,您不期望任何其他内容,您可以简单地声明 "ELSE NULL"。
最后,一定要确定 K.quarantined 是数字还是文本(检查 table DDL)。如果它实际上存储文本“0”或“1”,则应该相应地更改文字——尽管我认为当前版本的 Oracle 足够智能,可以为您进行隐式转换。
我在 Oracle SQL Developer 中编写了这段代码,但我不知道如何使用 CASE WHEN 以便 k.QUARANTINED = 0, 显示 'No', 否则如果 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
;
我尝试了几次,但很可能一直出现错误,因为我不知道如何正确编写语法,或者我可能必须以完全不同的方式重写它?我想保持列的顺序相同。我只想看到 k.Quarantined 的 'Yes' 或 'No' 而不是结果中返回的 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,
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的两个例子。当您评估单个 column/variable.
时使用第一个示例第二个例子用于测试多个条件。
使用 CASE 语句的第二个示例时,重要的是要了解 CASE 将 return 第一个条件的计算结果为 TRUE。当使用复杂的逻辑时,有时开发人员可能(不经意地)具有可以满足多个条件的重叠逻辑。当 CASE 出现意外结果时,返回并自上而下重新评估语句很重要。
如果您绝对确定 K.quarantined 不能为 NULL 且只能为 0 或 1(研究 table DDL 以了解检查约束),那么您可以删除或注释掉 ELSE 子句在 CASE 语句上——但通常好的做法是总是有一个 ELSE 子句以保持一致性。如果除了您的 CASE 语句中描述的内容之外,您不期望任何其他内容,您可以简单地声明 "ELSE NULL"。
最后,一定要确定 K.quarantined 是数字还是文本(检查 table DDL)。如果它实际上存储文本“0”或“1”,则应该相应地更改文字——尽管我认为当前版本的 Oracle 足够智能,可以为您进行隐式转换。