SQL Server 2012中IF ELSE子句正确用法求助:查询语法报错
解决SQL Server 2012中条件分支的语法错误问题
嘿,我一眼就看出问题啦——你在SELECT语句里用了IF...BEGIN...END结构,但SQL Server里不能直接在SELECT的列定义中使用IF流程控制语句,要实现这种条件返回不同值的需求,得用CASE WHEN表达式才行!
错误原因
IF是SQL Server的流程控制关键字,用来控制整个代码块的执行逻辑(比如存储过程、批处理里的分支),但不能用来生成查询结果中的列值。你需要的是条件表达式,也就是CASE WHEN,这才是查询中实现分支逻辑的正确方式。
修正后的查询语句
SELECT CASE WHEN s.SpecialInsttPlan = 'No' THEN (s.TotalBill - s.Advance) / s.Installments ELSE 'Special' END AS Installment FROM SalesInvoice s LEFT JOIN InstallmentPaymentHistory iph ON iph.SalesInvoiceID = s.SalesInvoiceID WHERE iph.SalesInvoiceID = 41 GROUP BY s.TotalBill, s.Advance, s.Installments, s.SpecialInsttPlan
额外注意点
- GROUP BY的补充:我在GROUP BY里加上了
s.SpecialInsttPlan,因为你的CASE表达式里用到了这个列,根据SQL Server的分组规则,SELECT中出现的非聚合列必须出现在GROUP BY里,不然会报错。 - 数据类型一致性:注意
(s.TotalBill - s.Advance)/s.Installments是数值类型,而'Special'是字符串类型,SQL Server会自动做隐式转换,但如果想避免潜在的类型问题,可以把数值结果转成字符串:THEN CAST((s.TotalBill - s.Advance) / s.Installments AS VARCHAR(20))
内容的提问来源于stack exchange,提问作者Qudsia
相关产品推荐
相关产品推荐

