Objectif de la démonstration J'utilise le nom de la table comme [DBO].[FACTINTERNETSALES] et la colonne [ORDERDATE]Pour vous, la colonne sera [CreatedDate].Pour info, cela se fait dans SQL Server.
DECLARE @START INT,
@END INT
SELECT @START = CAST(CAST(MIN(ORDERDATE) AS DATETIME) AS INT) FROM [DBO].[FACTINTERNETSALES]
SELECT @END = CAST(CAST(MAX(ORDERDATE) AS DATETIME) AS INT) FROM [DBO].[FACTINTERNETSALES]
--SELECT @START,@END
DECLARE @DATEDIM TABLE (ID INT IDENTITY(1,1) PRIMARY KEY, DATED DATETIME)
WHILE @START <= @END
BEGIN
INSERT INTO @DATEDIM VALUES (CAST(@START AS DATETIME))
SET @START = @START + 1
END
SELECT LU.WEEK,LU.MONTH,LU.YEAR,ISNULL(MAIN.COUNT,0) [COUNT]
FROM (
SELECT DATEPART(WEEK,DATED) [WEEK],DATEPART(MONTH,DATED) [MONTH],DATEPART(YEAR,DATED) [YEAR]
FROM @DATEDIM
GROUP BY DATEPART(WEEK,DATED),DATEPART(MONTH,DATED),DATEPART(YEAR,DATED)) LU
LEFT JOIN
(
SELECT [YEAR],[MONTH],[WEEK],COUNT(*) [COUNT] FROM
(SELECT DATEPART(YEAR,ORDERDATE) [YEAR],
DATEPART(MONTH,ORDERDATE) [MONTH],
DATEPART(WEEK,ORDERDATE) [WEEK]
FROM [DBO].[FACTINTERNETSALES] ) LUINNER
GROUP BY [YEAR],[MONTH],[WEEK]) MAIN
ON
LU.MONTH = MAIN.MONTH AND
LU.YEAR = MAIN.YEAR AND
LU.WEEK = MAIN.WEEK
ORDER BY LU.YEAR,LU.MONTH,LU.WEEK
Résultat : (Seulement une partie du résultat)