您需要创建一个日期范围从 $startDate 到 $endDate 以及附加零值占位符的临时表由于客户表的插入日期中存在潜在的间隙,列提出了一个挑战。
要克服这个问题,请考虑使用以下方法:
声明范围变量: 正如您已经完成的那样,使用以下声明来捕获最小和最大插入日期:
declare $startDate set $startDate = select min(InsertDate) from customer declare $endDate set $endDate = select max(InsertDate) from customer
创建虚拟日期表:使用临时表的架构,使用循环创建一个包含从 $startDate 到 $endDate 的日期的虚拟表:
CREATE TABLE #dates ( Month DATE, Trials INT DEFAULT 0, Sales INT DEFAULT 0 );
填充虚拟日期表: 到确保完整性,使用游标循环遍历从 $startDate 到 $endDate 的日期范围,将每个日期插入到虚拟中table:
DECLARE @d DATE = $startDate; WHILE @d <= $endDate BEGIN INSERT INTO #dates (Month) VALUES (@d); SET @d = DATEADD(DAY, 1, @d); END;
此方法动态生成指定范围内的完整日期范围,而不管客户表中的间隙如何。然后,您可以使用此虚拟表作为填充临时日期范围表的源。
以上是尽管源数据存在差距,如何在 SQL Server 2000 中生成完整的日期范围表?的详细内容。更多信息请关注PHP中文网其他相关文章!