WHERE 句ではなく、GROUP BY です。クエリは、存在する行のデータのみを返します。つまり、タイムスタンプの日付でグループ化すると、行がある日だけが返されます。 SQL Server は、"空白を埋める" 必要があることをコンテキストから知ることができません。また、何を使用しているかもわかりません。
通常の答えは、表示したいすべての日を生成する CTE であり、空白を埋めます。これは再帰的な SQL ステートメントを必要とするため少しトリッキーですが、よく知られたトリックです:
WITH CTE_Dates AS ( SELECT @START AS cte_date UNION ALL SELECT DATEADD(DAY, 1, cte_date) FROM CTE_Dates WHERE DATEADD(DAY, 1, cte_date) <= @END ) SELECT cte_date as TIME_STAMP, ISNULL(COUNT(HL_Logs.Time_Stamp), 0) AS counted_leads, FROM CTE_Dates LEFT JOIN HL_Logs ON DATEADD(dd, 0, DATEDIFF(dd, 0, Time_Stamp)) = cte_date WHERE Time_Stamp between @BEGIN and @END and ID_Location = @LOCATION GROUP BY cte_date
プレ>分解すると、CTE は自分自身を参照する共用体を使用して、一度に 1 日ずつ前の日付に再帰的に追加し、その日付をテーブルの一部として記憶します。 CTE を使用して * を選択した単純なステートメントを実行すると、開始と終了の間の日付のリストが表示されます。次に、このステートメントは、ログ タイムスタンプの日付に基づいて、この日付のリストをログ テーブルに結合しますが、左結合を使用してログ エントリを持たない日付を保持します ("右側かどうか)。最後に、代わりに日付とカウントでグループ化し、必要な回答を得る必要があります。