Snowflake CASE语句实现:列存在值返回1否则返回0的方法
问题解答
可以通过CASE语句实现该需求,你原写法的判断条件语法有误,调整后即可正常运行。
错误点说明
你原语句中CASE WHEN d.COL_A exists的写法不符合SQL规范:
EXISTS关键字仅用于判断子查询是否存在匹配返回结果,不能直接用来判断单个字段是否为非空值- SQL中判断字段是否存在有效非空值的标准语法是
字段名 IS NOT NULL
正确实现代码
以下为通用标准SQL写法,可适配MySQL、PostgreSQL、Oracle、SQL Server等绝大多数数据库:
SELECT *, CASE WHEN d.COL_A IS NOT NULL THEN 1 ELSE 0 END AS Col_B FROM Data D
如果你的业务规则中空字符串''也属于「无有效数值」需要返回0的场景,可以拓展判断条件:
SELECT *, CASE WHEN d.COL_A IS NOT NULL AND TRIM(d.COL_A) != '' THEN 1 ELSE 0 END AS Col_B FROM Data D
效果验证
使用你提供的示例数据运行上述语句,输出结果完全符合预期:
| Col A | Col B |
|---|---|
| 1/1/2020 | 1 |
| 1/2/2020 | 1 |
| 1/3/2020 | 1 |
| 0 |
内容的提问来源于stack exchange,提问作者Blackdynomite
相关产品推荐
相关产品推荐

