2017-09-18 123 views
0

我有一個表中列出的項目和數量將在某個到期日期前出售。 我想計算一個正在運行的總列,它會顯示在某個特定時間內將售出多少物品。下面是我試圖獲得運行總數,但它不像我預期的那樣工作。SQL運行總計

select item, due_date, qty, sum(qty) over (Order by item) 
from apsplan 
Where item ='19-3102875' 
order by item 

我的錯誤:我使用SQL Server 2012的

這裏

Msg 102, Level 15, State 1, Line 44 Incorrect syntax near 'order'.

PS是我從這裏

SELECT 
    item, 
    due_date, 
    qty, 
    (SELECT SUM(t2.qty) FROM apsplan t2 WHERE t2.item <= t1.item and item = '196-31020-005') AS rolling_qty 
FROM apsplan t1 
WHERE 
    item = '196-31020-005' 
ORDER BY 
    item 

這裏收到的其他建議是結果 - 不是運行總數,而是超過

item due_date qty rolling_qty 
196-31020-005 2017-09-20 00:59:00.000 1.00000000 24.00000000 
196-31020-005 2017-10-06 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2017-11-06 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2017-12-06 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-01-28 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-02-04 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-03-25 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-03-25 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-04-01 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-04-08 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-04-29 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-05-06 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-05-13 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-05-27 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-06-03 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-06-10 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-07-01 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-07-08 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-07-15 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-07-29 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-08-05 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-08-12 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-08-26 01:00:00.000 1.00000000 24.00000000 
196-31020-005 2019-09-02 01:00:00.000 1.00000000 24.00000000 
+0

問題中的查詢看起來很好。我沒有看到任何語法錯誤。你是否正在顯示你正在嘗試運行的實際查詢,還是某個精簡版本? –

+0

我同意弗拉基米爾,執行罰款。由於它聲明第44行,我懷疑這是更大的查詢的一部分,問題在於其他地方 – SEarle1986

+0

@ SEarle1986即代碼。我在上面的唯一的事情是在我來到這個之前我正在玩的同一個查詢的變化.....我已經註釋掉了所有這些,這些將會運行的唯一行是我在這裏發佈的行 – user2355773

回答

0

這是太長的評論。

儘管您使用的是SQL Server 2012,但實際功能取決於兼容級別。您可以查詢使用兼容級別:

SELECT name, compatibility_level FROM sys.databases 

這應該是至少110您與sum()使用order by。要更改兼容性,請參閱documentation。如果你有一個較舊的兼容性(可能少於100),那麼你可以得到這個錯誤。

+1

的結果其實,這是不正確的。至少,對於SQL Server 2014 Express。 'SUM(...)OVER(ORDER BY ...)'在我的測試中與用戶數據庫的兼容性級別100一起工作。 –