在聚合函数中按分区排序结果

时间:2018-07-05 13:00:05

标签: sql-server aggregate-functions

我正在研究T-SQL集运算符和Window函数。我正在观看有关Microsoft Virtual Academy的视频讲座,但是遇到无法解决的语法错误。

我有一个虚拟的Transactions表:

CREATE TABLE [dbo].[Transactions]
(
    [TransactionID] [int] IDENTITY(1,1) NOT NULL,
    [AccountID] [int] NOT NULL,
    [Amount] [money] NOT NULL,
    [TransactionDate] [datetime] NOT NULL
)

我填充了一些随机数据:

INSERT [dbo].[Transactions] ([AccountID], [Amount], [TransactionDate]) 
VALUES (1, 20.5000, '2018-07-03'), (1, 19.9900, '2018-07-03'),
       (2, 65.3000, '2018-07-03'), (2, 99.0000, '2018-07-04'),
       (1, 13.3000, '2018-07-04'), (1, 12.9900, '2018-07-04'),
       (2, 37.2500, '2018-07-04'), (1, 50.0000, '2018-07-05'),
       (1, 17.3500, '2018-07-05'), (2, 24.9000, '2018-07-05'),
       (1, 11.2500, '2018-07-05'), (2, 39.9000, '2018-07-05')

我现在要(在讲座之后)显示所有列以及附加的列CurrentBalance,显示将金额添加到以前的金额之后的余额,如下所示:

TransactionID AccountID   Amount                TransactionDate         Balance
------------- ----------- --------------------- ----------------------- -----------
1             1           20,50                 2018-07-03 00:00:00.000 20,50
2             1           19,99                 2018-07-03 00:00:00.000 40,49
5             1           13,30                 2018-07-04 00:00:00.000 53,79
6             1           12,99                 2018-07-04 00:00:00.000 66,78
.
.
.

根据MSDN上的讲座和文档,应该执行以下查询

SELECT
    *,
    SUM(Amount) OVER(PARTITION BY AccountID ORDER BY TransactionID, AccountID) AS Balance
FROM 
    Transactions
ORDER BY 
    TransactionID, AccountID

但我看到此错误消息:

  

Messaggio 102,livello 15,stato 1和riga 6
  'order'附近的语法不正确。

至于评论,这不是我得到错误的代码,这是屏幕截图

enter image description here

我正在远程SQL Server 2008 R2上使用SSMS v17.6。

谢谢, 戴维德。

0 个答案:

没有答案