有人可以帮助我理解 SQL 服务器查询中的这个 ORDER BY 错误吗?

Can someone help me understand this ORDER BY error in my SQL Server Query?

运行 在尝试输入 Total Population .vs. 的查询时出错。疫苗接种:

老实说,我不知道如何解决这个错误,而且我已经尽可能多地尝试 SQL(我是 SQL 的新手)到目前为止修复它的代码。有什么建议么? (如果需要更多代码,请告诉我,我将 post 整个项目,以便更好地理解问题的根源)

错误消息抱怨“RANGE window 框架的 ORDER BY 子句” - 您可能正在查看您的代码,没有看到 RANGE 和不知道在说什么。

知道 RANGEOVER clause 的可选部分会有所帮助:

OVER (   
   [ <PARTITION BY clause> ]  
   [ <ORDER BY clause> ]   
   [ <ROW or RANGE clause> ]  
  )

这有助于我们了解该错误是专门针对您查询的这一部分提出的:

OVER (PARTITION BY dea.LOCATION ORDER BY dea.LOCATION, dea.DATE)

因此,接下来我们再次阅读该消息,发现它在抱怨存储在 dea.LOCATIONdea.DATE 列中的数据的组合宽度。在没有看到列定义的情况下,我猜任何 DATE 列都会相当小,因此假设大部分数据来自 LOCATION 列是合理的。

一方面,我们可以尝试缩小这一列的宽度,例如取一个子串。但是,如果我们再次查看整个 OVER() 子句,我们会发现 ORDER BY 部分根本不需要它。

为什么?

因为同一列正用于对数据进行分区。 ORDER BY 定义了每个分区 的排序 - 但如果每个分区只包含与 dea.LOCATION 共享相同值的行,它们将按照定义,那么所有行将对该列值进行同等排序。

因此,只需将其从 ORDER BY 中删除,错误就会消失。