如何使用单条SELECT语句(无子查询)生成符合要求的Result列?
解决方案:基于ID直接判断的CASE表达式
这问题很清晰,你之前的CASE语句踩了个小坑——错把Flag当成了判断依据,但实际上需求是按ID来统一生成Result值对吧?直接把CASE的判断对象换成ID就搞定了,单条SELECT语句就能实现:
SELECT Date, ID, Flag, CASE ID WHEN 'b' THEN 'T' WHEN 'c' THEN 'F' -- ID为'a'时无匹配分支,默认返回NULL,正好符合需求 END AS Result FROM T1;
为什么这个方案可行?
- 需求的核心是按ID分组统一赋值,而不是根据每行的Flag值判断,所以CASE的判断目标应该是
ID字段而不是Flag。 - 当
ID='a'时,CASE表达式没有对应的WHEN分支,会默认返回NULL,完全符合你对ID=a的Result要求。 - 整个语句是单条SELECT,没有子查询、WITH子句,满足你的限制条件。
内容的提问来源于stack exchange,提问作者kanes
相关产品推荐
相关产品推荐

