Thanks.
Here is the final SQL i have:
I created a ReportDates table with the month, year
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [ReportDates](
[DateMonth] [int] NULL,
[DateMonthName] [nchar](10) NULL,
[DateYear] [int] NULL,
[ThisDate] [datetime] NULL
) ON [PRIMARY]
GO
==================================================================================================
--Populate ReportDates table
DECLARE @span int
DECLARE @CurrentDate datetime
DECLARE @StartRange datetime
DECLARE @EndRange datetime
DECLARE @Tmp datetime
set @span = 0 --
set @StartRange = DATEADD(MM, @span, dateadd(yyyy, -5, GETDATE())) -- 2008-01-01
set @EndRange = DATEADD(MM, @span, dateadd(yyyy, 8, GETDATE())) --- 2020-12-01
SET @CurrentDate = @StartRange
-- insert all dates into temp table
WHILE @CurrentDate <= @EndRange
BEGIN
SET @Tmp = DATEADD(MONTH, DATEDIFF(MONTH, 0, @CurrentDate), 0)
IF @CurrentDate < @EndRange
INSERT INTO ReportDates values(Month(@CurrentDate), DATENAME(MM, @CurrentDate), YEAR(@CurrentDate), @Tmp)
SET @CurrentDate = dateadd(mm, 1, @CurrentDate)
END
====================================================================================================
Select
COUNT(OBJECTID) AS NewUsers,
s.DateMonthName as MonthName,
s.DateMonth AS MonthNumber,
s.DateYear AS [Year]
FROM
(SELECT DISTINCT
DateMonth, DateYear, DateMonthName
FROM ReportDates
WHERE ThisDate BETWEEN DATEADD(MM, -6, GETDATE()) AND DATEADD(MM, 0, GETDATE())
) s
LEFT JOIN Users ON MONTH(RegisteredDate) = s.DateMonth AND YEAR(RegisteredDate) = s.DateYear
GROUP BY
s.DateMonth,
s.DateYear,
s.DateMonthName
ORDER BY s.DateYear