使用CASE语句检测空日期并筛选待支付费用无发票记录
SQL语句修正与建议
你的需求是筛选**存在待支付费用(pd.[Plan Fee]不为空)且未记录发票开具日期(pd.[Raise Plan Fee]为空)**的记录,原SQL语句存在语法错误,而且这个场景完全不需要用到CASE语句——CASE多用于字段值的分支转换或输出,并非筛选条件的首选方案。
原语句的问题
- CASE语法格式错误:正确的CASE结构要么是
CASE 字段 WHEN 值 THEN ... ELSE ... END,要么是CASE WHEN 条件 THEN ... ELSE ... END,你的写法既不符合规范,也缺少END结尾。 - 空值判断语法错误:SQL中判断字段非空必须用
IS NOT NULL,判断空值用IS NULL,不能写成WHEN NOT NULL这类格式。
正确的SQL写法
直接用WHERE条件组合即可实现需求:
SELECT * FROM vw_ProjectsDetailed AS pd WHERE pd.[Plan Fee] IS NOT NULL AND pd.[Raise Plan Fee] IS NULL;
补充:CASE语句的正确用法示例(供学习参考)
如果需要在查询结果中添加状态标记(比如标记出符合你需求的记录),可以用CASE语句:
SELECT *, CASE WHEN pd.[Plan Fee] IS NOT NULL AND pd.[Raise Plan Fee] IS NULL THEN '待开票' ELSE '已处理/无待支付费用' END AS 状态说明 FROM vw_ProjectsDetailed AS pd;
内容的提问来源于stack exchange,提问作者Leighton Morris
相关产品推荐
相关产品推荐

