如何解决有人可以帮助我理解 SQL Server 查询中的这个 ORDER BY 错误吗?
尝试输入总人口 .vs 查询时出错。疫苗接种:
老实说,我不知道如何纠正这个错误,到目前为止,我已经尝试了尽可能多的 sql(我对 sql 很陌生)来弄乱代码来修复它。有什么建议么? (如果需要更多代码,请告诉我,我会发布整个项目,以便更好地了解问题的根源)
解决方法
错误消息抱怨“ORDER BY
窗口框架的RANGE
子句” - 您可能正在查看您的代码,没有看到 RANGE
并且不知道它在说什么.
了解 RANGE
是 OVER
clause 的可选部分会很有帮助:
OVER (
[ <PARTITION BY clause> ]
[ <ORDER BY clause> ]
[ <ROW or RANGE clause> ]
)
这有助于我们知道该错误是专门针对您查询的这一部分提出的:
OVER (PARTITION BY dea.LOCATION ORDER BY dea.LOCATION,dea.DATE)
因此,接下来我们再次阅读消息并意识到它抱怨存储在 dea.LOCATION
和 dea.DATE
列中的数据的组合宽度。如果没有看到列定义,我猜任何 DATE
列都会相当小,因此可以合理地假设大部分数据来自 LOCATION
列。
一方面,我们可以尝试减小此列的宽度,例如通过子字符串。但是,如果我们再次查看整个 OVER()
子句,我们会发现在 ORDER BY
部分根本不需要它。
为什么?
因为同一列用于对数据进行分区。 ORDER BY
定义了每个分区内的排序 - 但如果每个分区只包含共享相同 dea.LOCATION
值的行,那么根据定义,所有行将平等排序在该列值上。
因此,只需将其从 ORDER BY
中删除,错误就会消失。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。