SQL数据集字段替换:当Col3=1时用Col3值生成新列
解决Col4列的条件赋值问题
嘿,我懂你为啥用coalesce没得到想要的结果啦——这个函数的逻辑是返回第一个非空的参数,但你的需求是仅当Col3等于1时才取Col3,其他所有情况(包括Col3为NULL)都取Col2,这和coalesce的默认逻辑不匹配。
你需要用CASE表达式来实现自定义的条件判断,这才是符合你需求的正确写法:
SELECT Col1, Col2, Col3, CASE WHEN Col3 = 1 THEN Col3 ELSE Col2 END AS Col4 FROM table1;
逻辑解释
- 当
Col3的值严格等于1时,Col4直接取Col3的1; - 除此之外的所有场景(不管
Col3是NULL、还是其他非1的数值),Col4都会取Col2的值,完美匹配你给出的预期输出。
再补充下为啥coalesce不适用:假设某天你的数据里出现Col3=2的行,coalesce(Col3, Col2)会返回2,但按照你的需求,这时候应该返回Col2的值,所以coalesce没法处理这种带特定值判断的场景,必须用CASE来做分支控制。
内容的提问来源于stack exchange,提问作者Nick Knauer
相关产品推荐
相关产品推荐

