2009-11-17 161 views
1

我必須在我的應用程序中實施圖表。假設我有一個表結構查詢在圖表中顯示結果

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軸上,你能否建議我實現相同的方法。

回答

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 
0

要使y軸上的結果爲x &,請使用PIVOT(SQL server 2005+)。

這種類型的查詢被稱爲CROSS TAB QUERIES

供您參考 SQL Server PIVOT examples