[英]Alias for conditional expression in CASE WHEN
I have a situation in which I use same condition checked multiple times using case when, query is as follows 我有这样一种情况,我使用查询的情况多次检查相同条件,如下所示
SELECT wcrus_status.emucarid,
CASE
WHEN (((wcrus_status.healthstatus = -1)
AND (
(SELECT eventtime
FROM wcru_latestevents
WHERE wcrus_status.emucarid = wcru_latestevents.emucarid
AND wcru_latestevents.eventuei = 'uei.opennms.org/rfnet-WCRU/ntpSyncTrap') > wcrus_status.startuptime))
OR ((wcrus_status.healthstatus <> -1)
AND (
(SELECT eventtime
FROM wcru_latestevents
WHERE wcrus_status.emucarid = wcru_latestevents.emucarid
AND wcru_latestevents.eventuei = 'uei.opennms.org/rfnet-WCRU/ntpSyncTrap') > wcrus_status.startuptime)
AND (
(SELECT eventtime
FROM wcru_latestevents
WHERE wcrus_status.emucarid = wcru_latestevents.emucarid
AND wcru_latestevents.eventuei = 'uei.opennms.org/rfnet-WCRU/ntpSyncTrap') > wcrus_status.posttime))) THEN ()
ELSE wcrus_status.ntp
END AS ntp
FROM wcrus_status
I tried WITH to select the eventtime to use in CASE WHEN, but no success. 我尝试使用WITH选择在CASE WHEN中使用的事件时间,但没有成功。 Could some one point me how to optimize this query with out duplicating the same subquery multiple times ??
有人可以指出我如何在不重复同一子查询多次的情况下优化此查询吗?
Something along the lines: 大致情况:
with data as (
SELECT wcrus_status.emucarid,
wcrus_status.healthstatus,
wcrus_status.startuptime,
wcrus_status.posttime,
wcrus_status.ntp,
(SELECT eventtime
FROM wcru_latestevents
WHERE wcrus_status.emucarid = wcru_latestevents.emucarid
AND wcru_latestevents.eventuei = 'uei.opennms.org/rfnet-WCRU/ntpSyncTrap') as eventtime
FROM wcrus_status
)
select emucarid,
case
when (((healthstatus = -1 AND eventtime > startuptime) OR healthstatus <> -1 AND eventtime > wcrus_status.startuptime) AND ....
ELSE ntp
END AS ntp
from data;
Note: This solution is for MSSQL
注意:此解决方案适用于MSSQL
What about this.. 那这个呢..
Declare @date as date
SELECT @date = eventtime
FROM wcru_latestevents
WHERE wcrus_status.emucarid = wcru_latestevents.emucarid
AND wcru_latestevents.eventuei = 'uei.opennms.org/rfnet-WCRU/ntpSyncTrap'
SELECT wcrus_status.emucarid,
CASE
WHEN (((wcrus_status.healthstatus = -1)
AND (
@date > wcrus_status.startuptime))
OR ((wcrus_status.healthstatus <> -1)
AND (
@date > wcrus_status.startuptime)
AND (
@date > wcrus_status.posttime))) THEN ()
ELSE wcrus_status.ntp
END AS ntp
FROM wcrus_status
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.