Eva*_*oll 8 sql-server-2008-r2 window-functions
我从排序分区上的聚合生成了以下虚拟列,
MIN(picture_id) OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
Run Code Online (Sandbox Code Playgroud)
但是,当我执行它时,我得到以下信息。
Msg 11305, Level 15, State 10, Line 12
The Parallel Data Warehouse (PDW) features are not enabled.
Run Code Online (Sandbox Code Playgroud)
不过,这就是有趣的地方,没有分区上的排序顺序,它可以工作:
MIN(picture_id) OVER ( PARTITION BY [360_set] )
Run Code Online (Sandbox Code Playgroud)
此外,ROW_NUMBER()
窗口函数(不是聚合函数)在分区上以显式顺序工作。
ROW_NUMBER() OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )
Run Code Online (Sandbox Code Playgroud)
为什么所需的语句不起作用?这是在哪里记录的?版本信息被请求,这是我在帮助→关于中的内容。
Microsoft SQL Server Management Studio 10.0.5512.0
Microsoft Analysis Services Client Tools 10.0.5500.0
Microsoft Data Access Components (MDAC) 6.1.7601.17514
Microsoft MSXML 3.0 6.0
Microsoft Internet Explorer 9.10.9200.16635
Microsoft .NET Framework 2.0.50727.5472
Operating System 6.1.7601
Run Code Online (Sandbox Code Playgroud)
从结果SELECT @@VERSION
就是Microsoft SQL Server 2008 (SP3) - 10.0.5512.0 (X64) Aug 22 2012 19:25:47 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (VM)
Pau*_*ite 16
并行数据仓库 (PDW) 功能未启用。
这是一个仅存在于 SQL Server 2008 中的解析器错误。 2012 年之前的 SQL Server 的非 PDW 版本不支持ORDER BY
具有聚合函数的子句,例如MIN
:
与从 SQL Server 2005 开始提供的基本实现相比,窗口功能支持在 2012 年得到了显着扩展。这些扩展在合并到盒装产品之前在并行数据仓库中可用。因为各种版本共享一个共同的代码库,所以可能会出现这样的误导性错误消息。
如果你有兴趣,聚合被解析器验证时的调用堆栈如下所示。因为聚合有一个OVER
带有的子句ORDER BY
,所以会发出对 PDW 的检查:
此检查立即失败并出现解析器错误:
幸运的是,您不需要支持ORDER BY
框架的窗口聚合来解决您的代码问题。