如何编写SQL查询仅返回符合指定条件的有效结果
正确SQL写法:仅返回符合指定条件的结果
直接使用WHERE子句过滤目标行,配合CASE计算Total即可解决问题,以下是具体实现:
通用SQL写法(常量X)
SELECT Balance, RateCol, CASE WHEN Balance > 0 AND RateCol > 2.25 THEN Balance WHEN Balance > 2000000000 AND RateCol <= 2.25 THEN Balance - 2000000000 END AS Total FROM your_table_name -- 替换为你的表名 WHERE -- 仅保留符合两个条件之一的行 (Balance > 0 AND RateCol > 2.25) OR (Balance > 2000000000 AND RateCol <= 2.25);
支持变量的写法(以MySQL/SQL Server为例)
如果需要灵活修改X的值,可以使用变量:
MySQL
SET @X = 2.25; SELECT Balance, RateCol, CASE WHEN Balance > 0 AND RateCol > @X THEN Balance WHEN Balance > 2000000000 AND RateCol <= @X THEN Balance - 2000000000 END AS Total FROM your_table_name WHERE (Balance > 0 AND RateCol > @X) OR (Balance > 2000000000 AND RateCol <= @X);
SQL Server
DECLARE @X DECIMAL(5,2) = 2.25; SELECT Balance, RateCol, CASE WHEN Balance > 0 AND RateCol > @X THEN Balance WHEN Balance > 2000000000 AND RateCol <= @X THEN Balance - 2000000000 END AS Total FROM your_table_name WHERE (Balance > 0 AND RateCol > @X) OR (Balance > 2000000000 AND RateCol <= @X);
问题原因说明
- 仅用
CASE出现NULL行:CASE只会为符合条件的行计算Total,不符合条件的行Total默认返回NULL,但WHERE未过滤这些行,导致结果包含无效记录。 WHERE中用CASE报错:CASE是返回单个值的表达式,无法直接作为布尔条件使用。WHERE子句需要的是布尔逻辑组合(AND/OR连接的条件),而非值判断。
内容的提问来源于stack exchange,提问作者Abbi KRK
相关产品推荐
相关产品推荐

