Teradata SQL中能否链式使用WHEN子句?如何实现多字段全0判断?
Teradata SQL中CASE语句的正确用法及替代方案
问题解析
你编写的CASE语句出现语法错误,核心原因是不能在同一个条件分支里使用AND WHEN。WHEN关键字用于定义独立的条件分支,多个并列判断条件应在同一个WHEN后用AND串联。
正确的CASE语句实现
修正语法后的代码可满足需求:
(CASE WHEN field1 = 0 AND field2 = 0 AND field3 = 0 AND field4 = 0 THEN 1 ELSE 0 END) AS field5
该逻辑清晰,当四个字段全为0时返回1,其余情况返回0。
更优替代方案
由于你的字段均为0/1标识位,可采用两种更简洁的实现方式:
方案1:求和判断
四个字段全为0时总和为0,否则总和≥1,直接通过总和判断:
(CASE WHEN field1 + field2 + field3 + field4 = 0 THEN 1 ELSE 0 END) AS field5
方案2:BITAND按位与运算
Teradata支持BITAND函数,对多个0/1字段进行按位与运算:全0时结果为0,存在1时结果为1。基于此可简化写法:
(1 - BITAND(BITAND(BITAND(field1, field2), field3), field4)) AS field5
逻辑:全0时按位与结果为0,1-0=1;存在1时按位与结果为1,1-1=0,完全匹配需求。
总结
你的需求完全可实现,修正后的CASE语句是最直观的写法;求和或BITAND方式更简洁,适合标识位字段的场景。
内容的提问来源于stack exchange,提问作者Joshua Pelton-Stroud
相关产品推荐
相关产品推荐

