2016-11-29 90 views
1

我有一个简单的查询,并注意到当我写sum语句时,结果总数不符合我的预期。我认为这是评估与'日期时间'格式的列。不确定如何避开它。无法搜索正确的词组以找到解决方案,但我期望它是一个常见的解决方案。也许是转换或转换为DATE格式,但这些结果的答案是有道理的。总结案件陈述和日期时间格式

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到字符文字,日期转换为字符(使用默认的日期格式),然后将它们字典顺序相比,这几乎总是一个坏主意。相反,你应该明确你的字符串文字转换为datetime,并允许数据库对他们恰当地比较:

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