使用IN子句时的情况

时间:2014-04-16 09:23:44

标签: sql oracle select

我需要一个查询来返回某个列的某个结果,具体取决于正在运行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子句的情况下重写它?

3 个答案:

答案 0 :(得分:3)

我使用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;

答案 1 :(得分:2)

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()

答案 2 :(得分:2)

decode(mod(nullif(instr('IDUEYN',active_indicator),0),2),0,'N',1,'Y')