2016-11-29 10 views
1

私は単純なクエリを持っており、sum文を書くときに気づいています。結果の合計数が期待したものと一致しません。私は 'datetime'形式の列を評価するときだと思います。それを回避する方法がわからない。解決策を見つけるために正しいフレーズを検索することに問題がありますが、私はそれが一般的なものであることを期待しています。たぶんキャスト、またはDATE形式に変換することができますが、それは理にかなった答えになりました。case文と日時書式との和

SELECT X.X_ITEMID, 
     SUM(CASE WHEN X.ActivityDate < '11/29/2016' THEN X.Qty ELSE 0 END) AS SUM_X 

FROM  ERP_X X 

WHERE X_ITEMID = 'abcdef' 
GROUP BY X.X_ITEMID 
+0

「ActivityDate」列のデータ型は? –

+0

activitydateはdatetimeデータ型です。 – Nicho247

答えて

3

あなたは比較日付文字リテラルに[時間] sが、日付が文字(デフォルトの日付書式を使用して)に変換され、その後、彼らはほとんど常に悪い考えである、辞書的に比較されます。代わりに、明示的に日時をご文字列リテラルに変換し、データベースが適切にそれらを比較できるようにする必要があります。

SELECT X.X_ITEMID, 
     SUM(CASE WHEN X.ActivityDate < CONVERT(datetime, '11/29/2016', 101) 
        THEN X.Qty 
        ELSE 0 
      END) AS SUM_X 
FROM  ERP_X X 
WHERE X_ITEMID = 'abcdef' 
GROUP BY X.X_ITEMID 
+1

ありがとうございます。これは機能しています。 – Nicho247

0

は怒鳴るコードを試してみて、私はそれはあなたが必要なもの、正しい結果を与える願っています。

SELECT X.X_ITEMID, 
     SUM(CASE WHEN convert(char(8),X.ActivityDate,112) < '20161129' 
        THEN X.Qty 
        ELSE 0 
     END) AS SUM_X FROM  ERP_X X 
WHERE X_ITEMID = 'abcdef' 
GROUP BY X.X_ITEMID 
関連する問題