Crystal和SQL Server之间的不同计数差异

时间:2014-05-07 22:32:44

标签: sql-server-2008 crystal-reports

我有一个视图,显示每列卡车条目的信息:ENTEREDdatetime)。基于此,我制作了一份Crystal报表,以显示每天的条目数:简单分组为ENTERED(按天)和摘要COUNT(Entered)

通过命令

可以在SQL Server中实现相同的效果
SELECT 
    convert(date, ENTERED),
    count(ENTERED)
FROM 
    View
GROUP BY   
    convert(date, ENTERED)

您可以看到结果(在Crystal Reports的左侧,从SQL Server开始 - 忽略最新的行,因为数据在当天不断更新) - 它们是相同的。

enter image description here

但现在我知道视图中有一些双重因素,所以我需要一个明显的计数。在Crystal中,只需更改摘要,在T-SQL中它就是

SELECT 
    convert(date, ENTERED),
    count (distinct ENTERED)
FROM 
    View
GROUP BY
    convert(date, ENTERED)

这是一个很大的惊喜:

enter image description here

不同的计数数字是不同的 - 不是很多但是不同。有谁知道为什么以及如何解决它(当然哪个版本是正确的)?

2 个答案:

答案 0 :(得分:0)

好的,经过一番研究后我发现差异背后的原因在于......毫秒。这很简单 - 当SQL服务器保留整个" tail"时,Crystal会将日期时间的一部分截断为小时,分钟和秒。毫秒 因此,虽然Crystal的版本是错误的,但在我的情况下,我必须修复事实(SQL语句)以匹配报告

SELECT convert (date, ENTERED),
count(distinct dateadd(millisecond, -datepart(millisecond, ENTRANCE), ENTRANCE))
FROM View1
GROUP by convert (date, ENTERED)

如何做相反的事情(在Crystal中用SQL显示正确的数字)仍然让我望而却步。

答案 1 :(得分:0)

不确定为什么它显示不同,但我建议使用不同的,并在水晶本地计数而不是查询。

SELECT 
    date,
    ENTERED
FROM 
    View

在水晶报表中使用此功能,然后使用水晶报表中的可用功能获取distinctcount