簡體   English   中英

生成連續日期的sql臨時表到左外連接到

[英]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;

SQL小提琴

一種方法是使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM