DECLARE @dimDate TABLE (
myDate datetime
,dt int
,yr int
,ym int
)
DECLARE @dte datetime
SET @dte = @STARTDATE
WHILE @dte <= @ENDDATE
BEGIN
INSERT INTO @dimDate (myDate, dt, yr, ym)
VALUES(
@dte
,datepart(yy,@dte)*10000+ datepart(mm,@dte)*100 + datepart(dd,@dte)
,datepart(yy,@dte)
,datepart(yy,@dte)*100+ datepart(mm,@dte)
)
SET @dte = dateadd(dd,1,@dte)
END
DECLARE @option varchar(2)
SET @option ='dt'
.
-- per day
IF @option ='dt'
BEGIN
SELECT d.dt, COUNT(s.ID) AS "song_count"
FROM @dimDate AS d
LEFT JOIN @SONGS AS s ON d.myDate = s.CREATEDDATE
GROUP BY d.dt
END
-- per year
IF @option ='yr'
BEGIN
SELECT d.yr, COUNT(s.ID) AS "song_count"
FROM @dimDate AS d
LEFT JOIN @SONGS AS s ON d.myDate = s.CREATEDDATE
GROUP BY d.yr
END
.
-- per year-month
IF @option ='ym'
BEGIN
SELECT d.ym, COUNT(s.ID) AS "song_count"
FROM @dimDate AS d
LEFT JOIN @SONGS AS s ON d.myDate = s.CREATEDDATE
GROUP BY d.ym
END