簡體   English   中英

if 語句 - 語句 SQL 時的情況

[英]if statement - Case when statement SQL

我試圖包含一個語句,如果MISTI返回DOWN那么我希望它從 output 列表中排除MISTIMISTI-AMISTI-B 這可能嗎? 我是 SQL 的新手,因此我們將不勝感激!

示例: AS480 返回為 DOWN,因此我不希望它返回 AS480、AS480-A、AS480-B。

表 Output: 在此處輸入圖像描述

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

假設:

  • 父實體總是 5 個字符
  • 您只想排除子實體 A 和 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 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.

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