2013-07-26 22 views
2
運行總

我有以下表(SQL Server 2012中):計算運行計數和跨客戶提供SQL

DID - cust id 
GID - order id 
AMT - order amt 
Gf_Date - order date 
SC - order reversal amount 

我試圖計算訂單的運行計數和運行總銷售額客戶,以便我可以爲客戶實現累計銷售額達到1,000美元的時間點分配一個標誌。作爲第一步,我已經運行此查詢:

Select 
    [DID] 
, [AMT] 
, [Gf_Date] 
, COUNT([GID]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [RunningGift_Count] 
, SUM([AMT]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [CumlativeTotal] 
FROM [dbo].[MCT] 
WHERE [SC] is null 
ORDER BY [DID] 

但我得到的錯誤信息:

消息102,級別15,狀態1,行3附近有語法錯誤 '秩序'

我之前發佈了這個貼錯誤的錯誤消息。遺憾和歉意。你上面看到的是我得到的結果。有人評論說這個語法不正確。現在,一切都是爲了,有人能告訴我我做錯了什麼嗎?

任何人都可以幫我嗎?在任何地方都找不到解決方案!謝謝!

+1

['ORDER BY'(http://msdn.microsoft.com/en-us/library/ms188385.aspx)必須最後的聲明。 –

+0

那麼,我不能在同一個查詢中執行RunningCount和RunningTotal嗎? –

+1

可能有多種方式。在SQL 2012中有使用'UNBOUNDED PRECEDING'的窗口函數,並且總是有遞歸的CTE作爲好的和快速的選項。我會看看我能否向你展示幾個例子。在此之前檢查此鏈接 - http://www.sqlperformance.com/2012/07/t-sql-queries/running-totals和http://stackoverflow.com/questions/860966/calculate-a-running-total- in-sqlserver並嘗試搜索'SQL Server Running Totals' –

回答

2

您應該使用ROW_NUMBERlink),而不是COUNT

DECLARE @Threshold NUMERIC(19,2)=1000; -- Use the same data type as `[AMT]`'s data type 

Select 
    [DID] 
, [AMT] 
, [Gf_Date] 
--, COUNT([GID]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [RunningGift_Count] 
, ROW_NUMBER() OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [RunningGift_Count] 
, SUM([AMT]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) [CumlativeTotal] 
, CASE 
     WHEN SUM([AMT]) OVER (PARTITION BY [DID] ORDER BY [Gf_Date]) >= @Threshold THEN 1 
     ELSE 0 
    END IsThresholdPassed 
FROM [dbo].[MCT] 
WHERE [SC] is null 
ORDER BY [DID]