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 足够智能,可以为您进行隐式转换。