8

次のテーブルがあります (SQL Server 2012):

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 'order' 付近の構文が正しくありません

以前、間違ったエラー メッセージを貼り付けて投稿しました。申し訳ありません。上に表示されているのは、私が得ている結果です。この構文は正しくないと誰かがコメントしました。すべてが整ったので、誰かが私が間違っていることを教えてもらえますか?

誰でも私を助けることができますか?どこにも解決策が見つかりません!ありがとう!

4

1 に答える 1

7

次の代わりにROW_NUMBER(リンク)を使用する必要があります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]
于 2013-07-27T05:54:14.780 に答える