我必须在我的应用程序中实现图表。假设我有一个表结构
DECLARE @SONGS TABLE
(
[ID] INT IDENTITY,
[SONGNAME] VARCHAR(20),
[CREATEDDATE] DATETIME
)
INSERT INTO @SONGS
SELECT 'SONG1','20091102' UNION ALL
SELECT 'SONG2','20091103' UNION ALL
SELECT 'SONG3','20091107' UNION ALL
SELECT 'SONG4','20091107' UNION ALL
SELECT 'SONG5','20091107' UNION ALL
SELECT 'SONG6','20091109'
现在,用户将从外部传递开始日期和结束日期,如下面的参数
DECLARE @STARTDATE DATETIME
DECLARE @ENDDATE DATETIME
SET @STARTDATE='20091101'
SET @ENDDATE='20091111'
现在,用户还有一个选项(SAY @OPTION VARCHAR(20)),他是否希望结果的日期分为开始日期和结束日期之间的各个日期,第二个选项,他可以选择将结果与日期分成开始日期和结束日期之间的月份,类似于年份。
--OUTPUT I NEED IS when @OPTION IS DATE
DATE [SONGCOUNT]
------------------------------------------
20091101 0
20091102 1
20091103 1
20091104 0
20091105 0
20091106 0
20091107 3
20091108 0
20091109 1
20091110 0
20091111 0
同样地,我希望根据选项(日,周,月,年)分割的日期结果在其旁边计数。 我的目标是在x轴上显示日期并在y轴上显示,你能否建议我实现相同的方法。
答案 0 :(得分:1)
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
答案 1 :(得分:0)