【问题标题】:Sample query from Microsoft SQL Server 2012 T-SQL fundamental not working来自 Microsoft SQL Server 2012 T-SQL 基础的示例查询不起作用
【发布时间】:2016-07-23 14:46:00
【问题描述】:

我最近开始关注 Microsoft SQL Server 2012 T-SQL Fundamental book 来学习 T-SQL。我尝试在 SQL Server 2008 r2 中执行以下查询

SELECT empid, ordermonth, val,
SUM(val) OVER(PARTITION BY empid
              ORDER BY ordermonth
              ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS runval
FROM Sales.EmpOrders;

查询无法执行并显示以下错误消息

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near 'ROWS'.

这是 sales.emporders 视图的片段

empid   ordermonth                  qty     val         numorders
-----------------------------------------------------------------
5       2007-10-01 00:00:00.000     361     7581.33         9
6       2007-06-01 00:00:00.000     173     3464.81         7
9       2007-09-01 00:00:00.000     93      8776.15         5
5       2008-02-01 00:00:00.000     276     5377.06         15
5       2007-07-01 00:00:00.000     213     6475.40         5
4       2006-10-01 00:00:00.000     613     13718.97        27

在想办法解决 sql server 2008 r2 时需要帮助

【问题讨论】:

标签: sql-server tsql sql-server-2012 sql-server-2008-r2 window-functions


【解决方案1】:

这不是 SQL Server 2012 的功能。您可以使用 OVER 函数,但在 2008R2 中没有以下功能:ROWS BETWEEN UNBOUNDED PRECEDING

见:

https://msdn.microsoft.com/en-us/library/ms189461(v=sql.105).aspx (2008R2)

与

https://msdn.microsoft.com/en-us/library/ms189461(v=sql.110).aspx (2012)

【讨论】:

  • 您能否为 2008 r2 运行总的 val 字段为特定月份的每个 empid 计算一个解决方法
  • 今晚去看看。
【解决方案2】:
SELECT empid, 
       ordermonth, 
       val,
       (SELECT SUM(val) 
        FROM Sales.EmpOrders ee 
        WHERE e.empid=ee.empid 
        AND ee.ordermonth<=e.ordermonth) AS runval
FROM Sales.EmpOrders e;

【讨论】:

    【解决方案3】:

    如果您使用的是 UNBOUNDED PRECEDING,我认为您可以放弃它
    你试过了吗?

    SELECT empid, ordermonth, val
         , SUM(val) OVER(PARTITION BY empid ORDER BY ordermonth) AS runval
    FROM Sales.EmpOrders;
    

    【讨论】:

    • 看来 sql server 2008 dosent 只支持分区而不支持聚合函数的排序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2014-11-04
    • 2016-03-25
    相关资源
    最近更新 更多