如何编写优先级查询:将指定CASE条件语句调整为优先级逻辑实现
重构CASE语句实现优先级逻辑判断
你的原CASE语句逻辑有个明显的问题:当AVL.SHIFT_SOURCE不等于'Planned schedule'时,第二个WHEN AVL.SHIFT_SOURCE <> 'Planned schedule'会直接匹配所有剩余的情况,导致后面判断'Assignment work schedule'的条件完全不会被执行,根本没法实现优先级排序的效果。
要解决这个问题,核心是按优先级从高到低依次编写判断条件,一旦匹配到高优先级的情况就立即返回结果,不再继续后续判断。假设你的优先级顺序是:
- 最高优先级:
Planned schedule - 次优先级:
Assignment work schedule - 最低优先级:
Normal working hours
重构后的正确CASE语句如下:
CASE WHEN AVL.SHIFT_SOURCE = 'Planned schedule' THEN 'Planned schedule' WHEN AVL.SHIFT_SOURCE = 'Assignment work schedule' THEN 'Assignment work schedule' ELSE 'Normal working hours' -- 若需要严格仅匹配三个值,可改为 WHEN AVL.SHIFT_SOURCE = 'Normal working hours' THEN 'Normal working hours' ELSE NULL END END
逻辑说明:
- 先检查最高优先级的
Planned schedule,匹配成功直接返回对应值; - 若未匹配,再检查次优先级的
Assignment work schedule,匹配成功返回对应值; - 最后剩下的所有情况(包括
Normal working hours或其他未定义的源值),默认返回最低优先级的Normal working hours。如果需求要求只有明确匹配三个值才返回对应结果,其他情况返回NULL,就把ELSE替换成明确的WHEN判断即可。
如果你的优先级顺序和上面假设的不同,只需要调整WHEN子句的顺序——把优先级最高的条件放在最前面就可以了。
内容的提问来源于stack exchange,提问作者Preeti
相关产品推荐
相关产品推荐

