SQL Server中PARTITION BY搭配ORDER BY出现语法错误如何解决
问题根因
你遇到的语法报错是由数据库兼容级别导致的:聚合函数OVER子句中搭配ORDER BY定义窗口帧的语法,是SQL Server 2012(对应兼容级别110)才新增的特性,你当前数据库设置为SQL Server 2008兼容级别(100),无法识别该语法,因此触发「'order'附近语法不正确」的报错。
排查验证步骤
执行以下SQL可以确认当前数据库的兼容级别:
SELECT name, compatibility_level FROM sys.databases WHERE name = 'PracticeDatabase';
如果返回的compatibility_level值为100,即可确认问题触发原因。
解决方案
方案1:升级数据库兼容级别(推荐)
如果你的业务没有必须依赖SQL Server 2008专属特性的场景,可直接将数据库兼容级别升级到110及以上(SQL Server 2019最高支持150级别的原生兼容级),升级命令如下:
ALTER DATABASE PracticeDatabase SET COMPATIBILITY_LEVEL = 110; -- 也可设置为150适配SQL Server 2019全部特性
升级完成后,你写的带ORDER BY的PARTITION BY语句即可正常运行,得到按Id排序的分组累计求和结果。
方案2:SQL Server 2008兼容替代写法
如果业务要求必须保留2008兼容级别,可以用关联子查询实现完全相同的运行累计逻辑,写法参考如下:
SELECT t1.Id, t1.StudentName, t1.StudentGender, t1.StudentAge, (SELECT SUM(t2.StudentAge) FROM PracticeDatabase..Students t2 WHERE t2.StudentGender = t1.StudentGender AND t2.Id <= t1.Id) AS RunningAgeTotal FROM PracticeDatabase..Students t1 ORDER BY t1.StudentGender, t1.Id;
内容的提问来源于stack exchange,提问作者erjabr
相关产品推荐
相关产品推荐

