需按月統計一段期間的資料時,撰寫迴圈自動遞增日期區間,避免手動修改查詢條件。
DECLARE @date1 DATE, @date2 DATE;
DECLARE @startdate DATE = '2010-06-01', @enddate DATE = '2011-07-01';
DECLARE @count INT = 1, @countsum INT = DATEDIFF(MONTH, @startdate, @enddate);
SET @date1 = @startdate;
SET @date2 = DATEADD(MONTH, 1, @startdate);
WHILE @count < @countsum BEGIN
-- 執行單月查詢
SELECT SUM(PassengerCount) AS 張數
FROM dbo.Orders
WHERE ProviderID = (SELECT UserId FROM dbo.User WHERE Username = 'wind2006')
AND OrderTime BETWEEN @date1 AND @date2;
SET @date1 = DATEADD(MONTH, 1, @date1);
SET @date2 = DATEADD(MONTH, 1, @date2);
SET @count = @count + 1;
END
DATEDIFF(MONTH, start, end):計算月份差作為迴圈次數。DATEADD(MONTH, 1, date):日期遞增一個月,自動處理跨年與月末邊界。同樣邏輯可擴充至週、日、季等任意時間顆粒度統計需求。