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

SQL Server 2005中ORDER BY为何无法与窗口函数配合使用?

语法错误原因及解决办法

错误原因

SQL Server 2005对窗口函数的支持存在版本限制:它的OVER()子句仅支持PARTITION BY,不允许在其中使用ORDER BY。你写的语句里,在SUM(CONVERT(int, v.new_vaccinations)) OVER (PARTITION BY d.location ORDER BY d.location,d.date)中加入了ORDER BY,这违反了2005的语法规则,因此触发了Incorrect syntax near 'order'的错误。

替代解决方案(SQL Server 2005兼容)

要实现按location分组、按date排序的累计接种数,可以用自连接加子查询的方式来模拟:

SELECT 
    d.location, 
    d.continent, 
    d.date, 
    d.population, 
    v.new_vaccinations,
    (
        SELECT SUM(CONVERT(int, v2.new_vaccinations))
        FROM PortofolioProject..covidvaccinations v2
        JOIN PortofolioProject..coviddeaths d2 
            ON v2.location = d2.location AND v2.date = d2.date
        WHERE d2.location = d.location AND d2.date <= d.date
    ) AS rolling_total_vaccinations
FROM PortofolioProject..coviddeaths d
JOIN PortofolioProject..covidvaccinations v
    ON d.location = v.location AND d.date = v.date
WHERE d.continent IS NOT NULL
ORDER BY d.location, d.date

另一种选择

如果可以升级到SQL Server 2012及以上版本,你原来的窗口函数语法就可以直接正常运行——从2012版本开始,SQL Server支持在OVER()子句中使用ORDER BY来定义累计窗口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:45:00