[英]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.