簡體   English   中英

選擇案例語句在Oracle中不起作用

[英]Select case statement not working in oracle

我有Kpi_definition表,其中對於特定的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'為所有KPI_DEF_ID然后OS.STATUS別的'N'

在此處輸入圖片說明

我寫了下面的選擇查詢,但它不起作用。 我正在視圖中編寫此查詢。

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
)

該查詢有效,我已將初始,停機,當前,手動列連接在一起,並使用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

嗨拉烏爾

該查詢在我的計算機上有效。已滿足您的要求。如果有幫助,請標記答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM