cri*_*589 5 sql sql-server sql-server-2008 window-functions
我正在运行SQL Server 2008,我目前正在尝试更多地理解over子句,我之前使用过它,但row_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')
Run Code Online (Sandbox Code Playgroud)
并使用以下查询为每个员工创建一个运行总和
select
employee, sales, datesale,
SUM(sales) over (partition by employee order by datesale) as mvgsum
from sales
Run Code Online (Sandbox Code Playgroud)
在使用SQL Server 2008的SQL小提琴上,我得到以下结果
| 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 |
Run Code Online (Sandbox Code Playgroud)
但是,在SQL Server Management Studio中,在SQL Server 2008数据库上,我使用相同的查询获得以下错误,具有相同的表结构和数据.
'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
Run Code Online (Sandbox Code Playgroud)
或者CROSS APPLY:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |