如何用SQL将三列数据通过条件判断生成结算状态单列?
用SQL生成结算状态列的解决方案
核心思路
在SQL中处理这种多条件分支的列计算,CASE语句是标准且通用的选择,比嵌套IF兼容性更好(不同数据库对IF的支持有差异,CASE是ANSI SQL标准)。不需要使用GROUP BY或ORDER BY,因为这是行级的字段转换,不是聚合或排序操作。
转换后的SQL语句
假设你的表名为settlement_table,对应的字段名分别是Settle_date、days_to_settle、days_late,SQL语句如下:
SELECT Settle_date, days_to_settle, days_late, CASE WHEN days_to_settle - days_late BETWEEN 0 AND 15 THEN 'Settle on Time' WHEN days_to_settle - days_late BETWEEN 16 AND 30 THEN '<15 Days Late' ELSE '<30 Days Late' END AS Settle_Status FROM settlement_table;
逻辑对应说明
- 第一个
WHEN条件对应Excel公式的AND(B2-C2<=15,B2-C2>=0),用BETWEEN简化写法,逻辑完全一致 - 第二个
WHEN条件对应AND(B2-C2<=30,B2-C2>15),用BETWEEN 16 AND 30匹配区间 ELSE分支对应所有超出上述区间的情况,返回<30 Days Late
示例验证
用你提供的测试数据执行上述SQL,会得到和预期一致的结果:
| Settle_date | days_to_settle | days_late | Settle_Status |
|---|---|---|---|
| 1/8/2021 | 11 | 0 | Settle on Time |
| 11/5/2021 | 16 | 0 | <15 Days Late |
| 10/11/2020 | 31 | 1 | <30 Days Late |
内容的提问来源于stack exchange,提问作者DatsMe
相关产品推荐
相关产品推荐

