$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 );
Populate Dummy Date表: 完全を期すため、カーソルを使用して $startDate から $endDate までの日付範囲をループし、以下を挿入します。各日付をダミー テーブルに追加します:
DECLARE @d DATE = $startDate; WHILE @d <= $endDate BEGIN INSERT INTO #dates (Month) VALUES (@d); SET @d = DATEADD(DAY, 1, @d); END;
このアプローチでは、customer テーブル内のギャップに関係なく、指定された範囲内の日付の完全な範囲が動的に生成されます。その後、このダミー テーブルを一時的な日付範囲テーブルに設定するためのソースとして使用できます。
以上がソース データにギャップがあるにもかかわらず、SQL Server 2000 で完全な日付範囲テーブルを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。