Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用over子句进行总计_Sql_Sql Server_Sql Server 2008_Window Functions - Fatal编程技术网

Sql 使用over子句进行总计

Sql 使用over子句进行总计,sql,sql-server,sql-server-2008,window-functions,Sql,Sql Server,Sql Server 2008,Window Functions,我正在运行SQL Server 2008,目前我正在尝试更多地理解over子句,我以前使用过它,但只是使用了row\u number(),我了解到您可以使用聚合函数来创建运行总数之类的内容 我创建了以下测试数据库 CREATE TABLE sales ( employee nvarchar(50), sales decimal(18, 2), datesale datetime ); Insert into sales Values('John','54.23','20

我正在运行SQL Server 2008,目前我正在尝试更多地理解over子句,我以前使用过它,但只是使用了
row\u number()
,我了解到您可以使用聚合函数来创建运行总数之类的内容

我创建了以下测试数据库

CREATE TABLE sales
(
    employee nvarchar(50),
    sales decimal(18, 2),
    datesale datetime
);

Insert into sales Values('John','54.23','2017-01-30 08:00:00.000')
Insert into sales Values('John','123.96','2017-01-30 09:00:00.000')
Insert into sales Values('John','534.20','2017-01-30 10:00:00.000')
Insert into sales Values('Ben','98.34','2017-01-29 04:00:00.000')
Insert into sales Values('Ben','126.32','2017-01-29 05:00:00.000')
并使用以下查询为每个员工创建一个运行总和

select 
    employee, sales, datesale, 
    SUM(sales) over (partition by employee order by datesale) as mvgsum 
from sales
在使用SQLServer2008的SQLFiddle上,我得到了以下结果

 | employee |  sales |                  datesale | mvgsum |
 |----------|--------|---------------------------|--------|
 |      Ben |  98.34 | January, 29 2017 04:00:00 |  98.34 |
 |      Ben | 126.32 | January, 29 2017 05:00:00 | 224.66 |
 |     John |  54.23 | January, 30 2017 08:00:00 |  54.23 |
 |     John | 123.96 | January, 30 2017 09:00:00 | 178.19 |
 |     John |  534.2 | January, 30 2017 10:00:00 | 712.39 |
但是,在SQLServerManagementStudio中,在SQLServer2008数据库上,我使用相同的查询,使用相同的表结构和数据,得到以下错误

“order”附近的语法不正确

这可能是什么原因造成的?

SUM()OVER()
在SQL Server 2008中不受支持

您可以使用相关子查询:

select employee,
    sales,
    datesale,
    (
        select sum(sales)
        from sales s2
        where s1.employee = s2.employee
            and s2.datesale <= s1.datesale
        ) mvgsum
from sales s1

,我用的是2014年,也是这个查询运行良好。Aggregade over子句于2012年引入。它在2008年不起作用。我在2008年工作时也遇到过类似的事情
select employee,
    sales,
    datesale,
    x.mvgsum
from sales s1
cross apply (
    select sum(sales) mvgsum
    from sales s2
    where s1.employee = s2.employee
        and s2.datesale <= s1.datesale
    ) x