[英]if statement - Case when statement SQL
我試圖包含一個語句,如果MISTI
返回DOWN
那么我希望它從 output 列表中排除MISTI
、 MISTI-A
、 MISTI-B
。 這可能嗎? 我是 SQL 的新手,因此我們將不勝感激!
示例: AS480 返回為 DOWN,因此我不希望它返回 AS480、AS480-A、AS480-B。
Select CASE WHEN entity like 'AS480%' then 'A'
WHEN entity like 'ET621%' then 'A'
WHEN entity like 'SZ101%' then 'A'
WHEN entity like 'HD801%' then 'A'
WHEN entity like 'ET328%' then 'A'
ELSE 'NONE'
end as GRID,
entity as MISTI , cur_state as STATE, ROUND(((SYSDATE-cur_state_dttm)*24),2) AS HRS
FROM trk_id_def
WHERE cur_state IN ('NM', 'DOWN')
and (entity like 'AS480%'
or entity like 'ET212%'
or entity like 'ET213%'
or entity like 'ET216%'
or entity like 'ET218%'
or entity like 'ET221%'
or entity like 'ET225%'
or entity like 'ET208%'
)
AND ROUND(((SYSDATE-cur_state_dttm)*24),2) >= 0
order by GRID ASC
假設:
您可以使用以下內容:
SELECT CASE
WHEN entity LIKE 'AS480%' THEN 'A'
WHEN entity LIKE 'ET621%' THEN 'A'
WHEN entity LIKE 'SZ101%' THEN 'A'
WHEN entity LIKE 'HD801%' THEN 'A'
WHEN entity LIKE 'ET328%' THEN 'A'
ELSE 'NONE'
END AS GRID,
entity AS MISTI,
cur_state AS STATE,
ROUND(((SYSDATE - cur_state_dttm)*24),2) AS HRS
FROM trk_id_def x
WHERE cur_state IN ('NM','DOWN')
AND (entity LIKE 'AS480%'
OR entity LIKE 'ET212%'
OR entity LIKE 'ET213%'
OR entity LIKE 'ET216%'
OR entity LIKE 'ET218%'
OR entity LIKE 'ET221%'
OR entity LIKE 'ET225%'
OR entity LIKE 'ET208%')
AND ROUND(((SYSDATE - cur_state_dttm)*24),2) >= 0
AND NOT EXISTS (
SELECT 1 FROM trk_id_def y
WHERE LENGTH(y.entity) = 5 --presumably (AS480, ETXXX etc)
AND y.cur_state = 'DOWN' --the parent entity is down
AND SUBSTR(x.entity,1,5) = y.entity --other entities related to the parent
AND (SUBSTR(x.entity,6,2) IN ('-A','-B') --just these suffixes
OR x.entity = y.entity) --or the parent itself
);
如果您有可能存在子實體名稱的其他后綴(-C、-D 等),並且您也想排除這些后綴,則可以刪除AND (RIGHT...
部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.