[英]generate sql temp table of sequential dates to left outer join to
我有一個數據表,我想通過存儲過程選擇出來,這樣用戶可以將MS excel前端連接到它並使用原始數據作為圖形來源。
表的原始數據的問題是日期中存在間隙,因為如果給定日期沒有數據(沒有該日期的記錄),那么當用戶嘗試繪制它時會產生問題。
我想要將我的存儲過程更新到左外連接到臨時表的日期,以便右側將作為空值進入,我可以轉換為零,以便他們具有簡單的繪圖體驗。
如何在開始日期和結束日期之間最好地生成一個日期字段表?
在SQL Server 2005及更高版本中,您可以使用類似這樣的內容(Common Table Expression CTE)來執行此操作:
DECLARE @DateFrom DATETIME
SET @DateFrom = '2011-01-01'
DECLARE @DateTo DATETIME
SET @DateTo = '2011-01-10'
;WITH DateRanges AS
(
SELECT @DateFrom AS 'DateValue'
UNION ALL
SELECT DATEADD(DAY, 1, DateValue)
FROM DateRanges
WHERE DateValue < @DateTo
)
SELECT * FROM DateRanges
你可以LEFT OUTER JOIN
這個CTE對你的表並返回結果。
另一種方法是使用內存表。 由於上述某些解決方案的遞歸限制,它不會窒息。
DECLARE @dates AS TABLE ([Date] date);
DECLARE @date date = {d '2010-10-01'};
DECLARE @endDate date = {d '2010-11-01'};
while (@date < @endDate)
BEGIN
INSERT INTO @dates VALUES (@date);
SET @date = dateadd(DAY, 1, @date)
END
SELECT * FROM @dates;
一種方法是使用CTE:
with cte_dates as (
select cast('20110119' as datetime) as [date]
union all
select dateadd(dd, 1, [date])
from cte_dates
where dateadd(dd, 1, [date]) <= '20111231'
)
select [date], YourColumn
from cte_dates
left join YourTable
on ...
option (maxrecursion 0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.