基于ReferenceID设置DisplayName字段的SQL语句报错求助
错误排查与修正
错误原因
- 别名语法错误:你把字段别名和CASE表达式的顺序搞反了,正确写法是先写计算逻辑(CASE表达式),再用
AS指定别名,而非先写原字段加别名再用等号关联CASE。 - 字符串比较不规范:
ReferenceID是Varchar类型,判断值为-1时必须用字符串格式(加单引号),否则会触发类型转换错误。 - 别名引用无效:SELECT子句中定义的别名
ReviewID不能在同层CASE表达式里直接使用——SQL执行顺序中,SELECT的别名要在WHERE、ORDER BY之后才生效,所以得直接用原字段ItemsSold.ReferenceID。
修正后的SQL语句
Select ItemsSold.ItemID, ItemsSold.ReferenceID as ReviewID, Case When ItemsSold.ReferenceID = '-1' Then 'Waived' Else ItemsSold.Description End AS DisplayName, ItemsSold.PurchaseDate From ItemsSold Where ItemsSold.ItemID > 2000
补充说明
如果ReferenceID存储的-1带有空格或其他格式,需要根据实际存储值调整CASE里的匹配字符串,确保完全一致。
内容的提问来源于stack exchange,提问作者user466663
相关产品推荐
相关产品推荐

