繁体   English   中英

使用IN子句的情况

[英]Case when using IN clause

我需要一个查询来为特定列返回特定结果,具体取决于要对select语句运行的列具有什么值。

如果列是以下之一:I,D,U,那么我想返回Y

如果列是以下之一:N,E,D,那么我想返回N

  else : I want to return NULL 

我写了下面的语句,但是不起作用。

   SELECT HIERARCHY_TYPE,
          NODE_ID,
          NODE_TYPE,
          NODE_NAME,
          NODE_LEVEL,
          PREFERRED_ALIAS,
          PARENT_NODE_ID,
          CASE ACTIVE_INDICATOR 
             WHEN ('I' or 'U' or 'Y') THEN 'Y'
             WHEN ('D' or 'E' or 'N') THEN 'N'
             ELSE NULL
          END
     FROM MV_HIERARCHY MV;

有没有一种方法可以重写它,而不必对每个可能的值使用多个OR子句?

我将使用IN运算符:

SELECT HIERARCHY_TYPE,
NODE_ID,
NODE_TYPE,
NODE_NAME,
NODE_LEVEL,
PREFERRED_ALIAS,
PARENT_NODE_ID,
CASE 
  WHEN ACTIVE_INDICATOR IN ('I','U','Y') THEN 'Y'
  WHEN ACTIVE_INDICATOR IN ('D','E','N') THEN 'N'
ELSE NULL
END AS ACTIVE_INDICATOR
FROM MV_HIERARCHY MV;
CASE 
   WHEN ACTIVE_INDICATOR IN ('I','U','Y') THEN 'Y'
   WHEN ACTIVE_INDICATOR IN ('D', 'E', 'N') THEN 'N'
   ELSE NULL -- useless, but for readbility
END as ACTIVE_INDICATOR

您必须重复ACTIVE_INDICATOR ,因为我认为(可能是错误的)您可以使用以下语法

CASE <field>
   WHEN IN()

但是你可以使用

CASE
  WHEN <field> IN()
decode(mod(nullif(instr('IDUEYN',active_indicator),0),2),0,'N',1,'Y')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM