顯示兩個日期之間的所有日期數據,包括零值
使用日期數據時,經常會遇到並非所有日期的情況表示在您的資料集中。這可能會導致您的分析出現空白。為了解決這個問題並顯示指定範圍內的所有日期,我們可以結合使用多種技術。
讓我們考慮以下問題:
我們有一個名為@temp 的表,其結構如下:
DECLARE @temp TABLE ( ID INT IDENTITY(1,1) NOT NULL, CDate SMALLDATETIME, Val INT )
表содержит 2012年10月2日到10月15日的數據, 2012 年。但是,我們希望檢索 2012 年 10 月 1 日至 2012 年 10 月 15 日之間的所有日期,並為任何缺失的日期顯示零值。
處理此問題的一種方法是使用遞歸公用表表達式 (CTE )與日曆表一起產生指定範圍內的所有日期。 CTE 定義如下:
;WITH d(date) AS ( SELECT CAST('10/01/2012' AS DATETIME), UNION ALL SELECT date + 1 FROM d WHERE date < '10/15/2012' )
此 CTE 產生從 2012 年 10 月 1 日到 2012 年 10 月 15 日的所有日期。
接下來,我們將CTE 與@temp 表連接起來檢索每個日期對應的值,使用ISNULL NULL 處理函數處理缺失的日期,如下所示query:
SELECT t.ID, d.date AS CDate, ISNULL(t.val, 0) AS val FROM d LEFT JOIN temp t ON t.CDate = d.date ORDER BY d.date OPTION (MAXRECURSION 0)
OPTION (MAXRECURSION 0) 用於限制CTE 中的遞歸數量,確保查詢不會無限期地執行。透過將其設為 0,它允許無限遞歸。
此查詢將產生所需的結果,顯示 2012 年 10 月 1 日至 2012 年 10 月 15 日之間的所有日期,任何缺失日期的值為零。
以上是如何顯示兩個日期之間的所有日期,包括缺失日期的零值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!