SQL CASE语句报错‘>’附近语法错误,请求修正条件筛选逻辑
问题分析与解决
你的SQL语句报错是因为CASE表达式的语法错误:CASE的THEN/ELSE分支必须返回具体的字段值或常量,而不是像你写的那样直接放布尔条件判断(>=/<=这类表达式),这不符合SQL语法规范。
根据你的需求(Saleflag=1时显示SalePrice在25-50的结果;否则显示Price在25-50的结果),分两种场景给出正确写法:
场景1:仅筛选出符合条件的记录
如果需要只保留满足条件的行(Saleflag=1时SalePrice在25-50之间,或Saleflag≠1时Price在25-50之间),用WHERE子句做筛选,再通过CASE返回对应价格:
SELECT CASE WHEN Saleflag = 1 THEN SalePrice ELSE Price END AS Price FROM [Table] -- 注意:Table是SQL关键字,建议换表名,或用方括号/反引号包裹 WHERE (Saleflag = 1 AND CAST(SalePrice AS DECIMAL) BETWEEN 25 AND 50) OR (Saleflag != 1 AND CAST(Price AS DECIMAL) BETWEEN 25 AND 50)
场景2:保留所有行,仅显示符合条件的价格
如果需要返回所有行,但仅在价格符合条件时显示对应值,不符合则显示NULL:
SELECT CASE WHEN Saleflag = 1 AND CAST(SalePrice AS DECIMAL) BETWEEN 25 AND 50 THEN SalePrice WHEN Saleflag != 1 AND CAST(Price AS DECIMAL) BETWEEN 25 AND 50 THEN Price ELSE NULL END AS Price FROM [Table]
额外注意事项
- 比较数值时直接用数字(
25/50),不要加引号,避免不必要的类型转换问题。 - 尽量不要用
Table作为表名,这是SQL保留关键字,容易引发语法冲突。
内容的提问来源于stack exchange,提问作者bob24
相关产品推荐
相关产品推荐

