微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决有人可以帮助我理解 SQL Server 查询中的这个 ORDER BY 错误吗?

尝试输入总人口 .vs 查询时出错。疫苗接种:

1

老实说,我不知道如何纠正这个错误,到目前为止,我已经尝试了尽可能多的 sql(我对 sql 很陌生)来弄乱代码来修复它。有什么建议么? (如果需要更多代码,请告诉我,我会发布整个项目,以便更好地了解问题的根源)

解决方法

错误消息抱怨“ORDER BY 窗口框架的RANGE 子句” - 您可能正在查看您的代码,没有看到 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 中删除,错误就会消失。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。