我有一个简单的查询,并且注意到当我写一个sum语句时,结果总数与我的预期不符。我认为在评估具有'datetime'格式的列时。不确定如何解决它。无法搜索正确的短语以找到解决方案,但我希望它是一个常见的短语。也许是演员或转换为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 :(得分: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 :(得分: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