Select case 语句在 oracle 中不起作用

Select case statement not working in oracle

我有 Kpi_definition table,其中 event_id 可以有多个 KPI_DEF_ID。例如 event_id = 10250 有两个 KPI_DEF_ID。我必须首先检查 event_id 是否存在 KPI_DEF_ID,如果不存在则将 STATUS 设置为 'N'。在另一种情况下,我必须检查 KPI_DEF_ID 是否存在以及 KPI_ACTIVE_INITIAL,KPI_ACTIVE_CURRENT,KPI_ACTIVE_MANUAL,KPI_ACTIVE_DOWNTIME = 'N' 的字段值的 none 对于所有 KPI_DEF_ID 然后 OS.STATUS 否则 'N' .

我已经编写了下面的 select 查询,但它不起作用。我正在视图中编写此查询。

SELECT 'EVENT'     AS OBJECT_TYPE, 
       os.event_id AS OBJECT_ID, 
       CASE 
         WHEN NOT EXISTS(SELECT KD.kpi_def_id 
                         FROM   rator_monitoring_configuration.kpi_definition KD 
                         WHERE  KD.event_id = os.event_id 
                                AND KD.kpi_type IN ( 19, 21 )) THEN 'N' 
         WHEN EXISTS(SELECT KD.kpi_def_id 
                     FROM   rator_monitoring_configuration.kpi_definition KD 
                     WHERE  KD.event_id = os.event_id 
                            AND KD.kpi_type IN ( 19, 21 ) 
                            AND ( KD.kpi_active_initial = 'N' 
                                   OR KD.kpi_active_current = 'N' 
                                   OR KD.kpi_active_manual = 'N' 
                                   OR KD.kpi_active_downtime = 'N' )) THEN 'N' 
         ELSE os.status 
       END         AS OBJECT_STATUS 
FROM RATOR_MONITORING.EVENT_STATUS OS

尝试在 ELSE 部分使用另一个 CASE.. 像这样编写查询:

SELECT 'EVENT'     AS OBJECT_TYPE, 
       os.event_id AS OBJECT_ID, 
       CASE 
         WHEN NOT EXISTS(SELECT KD.kpi_def_id 
                         FROM   rator_monitoring_configuration.kpi_definition KD 
                         WHERE  KD.event_id = os.event_id 
                                AND KD.kpi_type IN ( 19, 21 )) THEN 'N' 
         ELSE CASE WHEN EXISTS(SELECT KD.kpi_def_id 
                     FROM   rator_monitoring_configuration.kpi_definition KD 
                     WHERE  KD.event_id = os.event_id 
                            AND KD.kpi_type IN ( 19, 21 ) 
                            AND ( KD.kpi_active_initial = 'N' 
                                   OR KD.kpi_active_current = 'N' 
                                   OR KD.kpi_active_manual = 'N' 
                                   OR KD.kpi_active_downtime = 'N' )) THEN 'N' 
             ELSE os.status 
             END  
       END         AS OBJECT_STATUS 
FROM RATOR_MONITORING.EVENT_STATUS OS
select case when decode(kpi_def_id,NULL,'N',col,0,'N') <> 'N' then status else 'N' end case from
(
 select kpi_def_id,instr(ini||curr||downtime||manual,'Y',1) col,ex_6.status status from ex_6
)

这个查询有效,我连接了 initial、downtime、current、manual 列,并使用 instr 函数查找该字符串中是否有字符 'Y',并在外部查询中使用内部查询返回的结果,借助解码功能我们可以达到预期的结果

此致,

select decode(kpi_def_id,NULL,'N',
       case when instr(ini||curr||downtime||manual,'N',1) = 0 
       then status else 'N' end)
from ex_6

嗨拉胡尔,

此查询在我的机器上有效。已填写您的 requirement.Please 如果有帮助,请标记答案。