您需要建立日期範圍從$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中文網其他相關文章!