[英]SQL Date Query include month even if no data
我有一個預訂數據庫,其中包含每個預訂的不同日期。 我想獲得每個月所有預訂的數量,例如
JAN | 12
FEB | 15
MAR | 53
APR | 25
如果我一個月內的預訂量為零,那么我仍如何獲得列出的月份? 例如:
JAN | 12
FEB | 15
MAR | 53
APR | 0
MAY | 52
架構:
ID | BookingDate | REF
我沒有或不想參加一個月的會議。
以下是我到目前為止的查詢:
SELECT TOP 1000 [Id]
,[MemberId]
,[LocationId]
,[Date]
,[BookingStateId]
,[RPEFeeling]
,[RPEPush]
,[Notes]
,[TimeSlotId]
,[MembershipId]
,[TrialSession]
,[CreatedDate]
,[ModifiedDate]
,[CreatedBy]
,[ModifiedBy]
FROM [DB].[dbo].[SessionBooking]
DECLARE @months TABLE (MonthNumber INT, YearNumber INT, Name VARCHAR(50))
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (1, 2014, 'Jan')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (2, 2014, 'Feb')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (3, 2014, 'Mar')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (4, 2014, 'Apr')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (5, 2014, 'May')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (6, 2014, 'Jun')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (7, 2014, 'Jul')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (8, 2014, 'Aug')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (9, 2014, 'Sept')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (10, 2014, 'Oct')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (11, 2014, 'Nov')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (12, 2014, 'Dec')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (1, 2015, 'Jan')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (2, 2015, 'Feb')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (3, 2015, 'Mar')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (4, 2015, 'Apr')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (5, 2015, 'May')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (6, 2015, 'Jun')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (7, 2015, 'Jul')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (8, 2015, 'Aug')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (9, 2015, 'Sept')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (10, 2015, 'Oct')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (11, 2015, 'Nov')
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (12, 2015, 'Dec')
SELECT MonthNumber, YearNumber, SUM(Id)
FROM SessionBooking b
RIGHT JOIN @months mo ON DATEPART(m, b.Date) = mo.MonthNumber
AND DATEPART(yy, b.Date) = mo.YearNumber
GROUP BY mo.MonthNumber, mo.YearNumber
這僅返回以下結果(每個月過去兩年中有多次預訂)。
MonthNumber YearNumber (No column name)
1 2014 NULL
2 2014 NULL
3 2014 NULL
4 2014 NULL
5 2014 NULL
6 2014 NULL
7 2014 NULL
8 2014 NULL
9 2014 NULL
10 2014 NULL
11 2014 NULL
12 2014 NULL
1 2015 NULL
2 2015 215
3 2015 134
4 2015 NULL
5 2015 NULL
6 2015 NULL
7 2015 NULL
8 2015 NULL
9 2015 NULL
10 2015 NULL
11 2015 NULL
12 2015 NULL
您需要在所有月份中都有一個表變量,然后進行JOIN。
DECLARE @months TABLE (MonthNumber INT, YearNumber INT, Name VARCHAR(50))
INSERT INTO @months (MonthNumber, YearNumber, Name) VALUES (1, 2015, 'January')
...
SELECT MonthNumber, YearNumber, ISNULL(SUM(...), 0)
FROM Booking b
RIGHT JOIN @months mo ON DATEPART(m, b.BookingDate)=mo.MonthNumber AND DATEPART(yy, b.BookingDate)=mo.YearNumber
GROUP BY mo.MonthNumber, mo.YearNumber
編輯:如果要考慮多年,請將年添加為@month中的列,並更改CROSS JOIN條件以考慮年和月。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.