2013-10-16 35 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