SQL中基于MP值自定义命名及MHT条件计算的CASE语句实现问询
修正后的SQL查询方案
原代码的问题点
- 不符合NULL要求:MP小于0.6时返回
0,但需求明确要返回NULL - 同层别名引用错误:
SELECT语句里不能直接用刚定义的HT别名做后续判断 - 字符串格式不匹配:返回的命名带多余空格,且大小写和需求的
beveledring、Ring不一致 - MHT处理逻辑错误:不符合条件时返回
0,但需求是保留MHT原值
正确实现代码
SELECT *, CASE WHEN MP BETWEEN 0.6 AND 0.79 THEN 'beveledring' WHEN MP BETWEEN 0.8 AND 0.99 THEN 'Ring' WHEN MP < 0.6 THEN NULL ELSE NULL -- 处理MP≥1或为NULL的场景 END AS HT, CASE WHEN MP BETWEEN 0.6 AND 0.79 THEN MHT / 2 ELSE MHT -- 其他情况保持MHT原有值 END AS adjusted_MHT FROM your_table_name; -- 替换成你的实际表名
关键说明
- MP的判断完全贴合需求:覆盖了0.6-0.79、0.8-0.99、小于0.6的场景,同时处理了MP≥1或为NULL的情况,统一返回
NULL - 处理MHT时直接复用MP的判断条件,避开了同层别名无法引用的问题
- 统一命名格式,去掉多余空格,严格匹配需求里的命名规范
- 把处理后的MHT命名为
adjusted_MHT,避免和原字段冲突;如果需要直接替换原MHT字段,可将别名改为MHT
内容的提问来源于stack exchange,提问作者Kel
相关产品推荐
相关产品推荐

