2013-10-16 34 views
0

我正在尝试使用OVER子句返回一行。我的代码如下:SQL OVER运行总计选择一条记录

SELECT SUM(Price) OVER (ORDER BY [InvoiceID] ROWS UNBOUNDED PRECEDING) 
FROM dbo.Sales 
WHERE InvoiceID = 3427 

我要回:

InvoiceID Price 

3427  15.00 

而是什么返回是:

InvoiceID Price 

3427 5.00 

3427 10.00 

3427  15.00 

如何获得只是一个行?

+0

什么是你的sql后端和表结构? – kgu87

+0

SQL 2012标准 –

+0

是否有一个原因,你不能与前1名,分组和排序? – kgu87

回答

1

不确定为什么要使用OVER()子句。看来你只需要:

SELECT InvoiceID, Price = SUM(Price) 
    FROM dbo.Sales 
    WHERE InvoiceID = 3427 -- maybe you want more than just this one? 
          -- if so, leave out the WHERE clause 
    GROUP BY InvoiceID; 
0

其实OVER子句中的窗口规范主要有三个部分:分区,排序和框架。窗口框架子句(ROWS BETWEEN AND)过滤来自两个指定分隔符之间的窗口分区的行或子集。在你的查询中,框架没有被正确指定,它应该像分区的开始(即无界前置)和当前行(当前行)之间那样。以下查询应该有所帮助:

SELECT SUM(Price) OVER (ORDER BY [InvoiceID] ROWS BETWEEN UNBOUNDED PRECEDING 
AND CURRENT ROW) 
FROM dbo.Sales 
WHERE InvoiceID = 3427