【问题标题】:Issue with Window Function in SQL Server 2008 R2SQL Server 2008 R2 中的窗口函数问题
【发布时间】:2012-10-02 07:31:31
【问题描述】:

我在以下 SQL 脚本中遇到执行错误:

SELECT TOP 1 PERCENT
    a.accode, a.voucherdate, a.credit, a.Debit,
    SUM(a.Debit) OVER (ORDER BY [a.accode],[a.voucherdate]) AS rdr 
FROM
    VoucherMain AS a 
ORDER BY 
    a.accode, a.voucherdate

错误信息

“订单”附近的语法不正确

谁能告诉我我的语法有什么问题?

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2008-r2 over-clause


    【解决方案1】:

    问题是您需要 SQL Server 2012 及更高版本。好的,我为未来的访问者添加了“及以上”,但比较 2008 OVER CLAUSE2012 OVER CLAUSE

    2008 版有这个重要说明:

    在排名窗口函数的上下文中使用时,<ORDER BY Clause> 只能引用由 FROM 子句提供的列。 不能指定整数来表示名称的位置 或选择列表中列的别名。 &lt;ORDER BY Clause&gt; 不能 与聚合窗口函数一起使用。

    【讨论】:

      【解决方案2】:

      在SQL Server 2008中,你只能使用OVER clausepartition聚合函数,不能应用顺序:

      排名窗口函数 :: = OVER ( [ PARTITION BY value_expression , ... [ n ] ] )

      聚合窗口函数 :: = OVER ([ PARTITION BY value_expression , ... [n] ])

      请注意,聚合没有 &lt;ORDER BY Clause&gt;

      【讨论】:

      • 如果我必须在上面给出的查询中获得总借方,我在带有窗口功能的 SQL Server 2008 R2 中有哪些选项。目前我正在使用CLR集成功能来运行总计。如果这个 Window 函数比基于 CLR 的函数性能更好,那么它会很棒。如果有任何博客或链接可以显示使用 SQL Server 2008 R2 执行此类窗口函数的示例,那将很有帮助。尼尔坎特
      • @NilkanthDesai - 可以在 SQL 中计算运行总计 - 通常使用递归公用表表达式 (CTE) 或“三角连接”(条件为不等式的连接,例如 @ 987654324@)。在此站点或其他地方搜索 SQL 中的运行总计应该会找到一些不错的答案。
      • 完美答案!我使用的是 ORDER BY 子句,当我将字段移动到 PARTITION 时,查询运行良好。 SUM(EE.IsRecScheduled) OVER(PARTITION BY EE.EmployeeId, EE.EVENTDATE) "IsDayEmplScheduled"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 2011-12-14
      相关资源
      最近更新 更多