[英]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.