请求将指定CASE表达式转换为DECODE语句
CASE转DECODE语句实现
转换后的DECODE语句
DECODE(SIGN( CASE WHEN a.startdate = b.startdate AND a.enddate <> b.enddate THEN 1 ELSE 0 END + CASE WHEN a.idcount = b.idcount AND a.iddte <> b.iddte THEN 1 ELSE 0 END ), 1, 1, 0)
逻辑说明
原CASE语句的核心逻辑是:只要两个条件中的任意一个成立,返回1;否则返回0。由于DECODE仅支持等值匹配,我们通过以下步骤实现等价逻辑:
- 把每个条件单独转换成1(条件成立)或0(条件不成立);
- 将两个结果求和,若至少一个条件成立,总和会≥1;
- 用
SIGN()函数判断总和的正负(总和≥1时返回1,否则返回0); - 最后用DECODE匹配SIGN的结果,返回对应的1或0。
注:原CASE中的a.id dte应为笔误,转换时修正为a.iddte以匹配b.iddte。
内容的提问来源于stack exchange,提问作者Himanshu
相关产品推荐
相关产品推荐

