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 如果有帮助,请标记答案。
我有 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 如果有帮助,请标记答案。