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