【发布时间】:2012-09-04 13:26:59
【问题描述】:
我创建了以下存储过程,用于计算所选位置的特定范围内每天的记录数:
[dbo].[getRecordsCount]
@LOCATION as INT,
@BEGIN as datetime,
@END as datetime
SELECT
ISNULL(COUNT(*), 0) AS counted_leads,
CONVERT(VARCHAR, DATEADD(dd, 0, DATEDIFF(dd, 0, Time_Stamp)), 3) as TIME_STAMP
FROM HL_Logs
WHERE Time_Stamp between @BEGIN and @END and ID_Location = @LOCATION
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, Time_Stamp))
但问题是结果没有显示记录为零的日子,我很确定这与我的 WHERE 语句不允许显示零值有关,但我不知道如何结束来这个问题。
提前致谢 尼尔
【问题讨论】:
-
如果你删除聚合,你会得到你期望的行吗?
-
正如其他人发布的那样,您首先需要一个实际的日期列表(我自己更喜欢永久日历文件 - 如果企业的财务日历与标准不符,它们特别有用当地日历)。但是,请切勿使用
BETWEEN,尤其是用于日期/时间/时间戳值。我们自己的 Aaron Bertrand 有一个 blog post,关于 SQL Server 在使用此子句时遇到的特定问题。
标签: sql sql-server-2008 count