You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中SUM+CASE+LEFT语法报错:‘2015’附近语法不正确

解决SQL Server语法错误及优化日期统计的方案

嘿,我立马就发现你问题的症结啦!你碰到的Incorrect syntax near '2015'错误,根源在于以数字开头的列别名没有被正确包裹——SQL Server不允许直接用2015Sales这种格式作为列别名,必须给它加上方括号或者双引号才行。

另外,我还想给你优化一下年份判断的逻辑:你的FP_Based_on_Comm_Date是数值型字段(格式为yyyymmm,比如2015001),完全没必要转成字符串再截取前四位,用数值运算直接提取年份会更高效,代码也更简洁。

修正后的完整SQL代码

SELECT 
    SUM(CASE WHEN FP_Based_on_Comm_Date / 1000 = 2015 THEN Net_Value ELSE 0 END) AS [2015Sales],
    SUM(CASE WHEN FP_Based_on_Comm_Date / 1000 = 2016 THEN Net_Value ELSE 0 END) AS [2016Sales],
    SUM(CASE WHEN FP_Based_on_Comm_Date / 1000 = 2017 THEN Net_Value ELSE 0 END) AS [2017Sales],
    SUM(CASE WHEN FP_Based_on_Comm_Date / 1000 = 2015 THEN Eaches ELSE 0 END) AS [2015Eaches],
    SUM(CASE WHEN FP_Based_on_Comm_Date / 1000 = 2016 THEN Eaches ELSE 0 END) AS [2016Eaches],
    SUM(CASE WHEN FP_Based_on_Comm_Date / 1000 = 2017 THEN Eaches ELSE 0 END) AS [2017Eaches]
FROM DB;

关键说明

  • 语法错误修复:把所有以数字开头的别名(比如2015Sales)用方括号[]包裹,SQL Server就能正确识别这些别名了。你也可以用双引号,但方括号是SQL Server更通用的写法。
  • 性能优化:用FP_Based_on_Comm_Date / 1000 = 2015代替字符串截取,因为数值运算比字符串操作更快,而且避免了类型转换可能带来的潜在问题(比如数值转字符串时的格式异常)。

如果你的FP_Based_on_Comm_Date字段里有不符合yyyymmm格式的数值,可能需要先做数据校验,但按照你描述的字段格式,这个优化完全适用。

内容的提问来源于stack exchange,提问作者GregdeLima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:34:33