還是以學生、語文、數學、分數為例吧, 感覺這個和helloworld都有一拼了. 造一張表如下, 整張報表就圍繞這個表轉圈了, 順便說下就是名字如有雷同純屬巧合 新建個存儲過程 ALTER PROCEDURE [dbo].[StudentReport] AS BEGIN select 學期,max( ...
還是以學生、語文、數學、分數為例吧, 感覺這個和helloworld都有一拼了.
造一張表如下, 整張報表就圍繞這個表轉圈了, 順便說下就是名字如有雷同純屬巧合
新建個存儲過程
ALTER PROCEDURE [dbo].[StudentReport] AS BEGIN select 學期,max(總分) 最高總分 from(select 學期,姓名, sum(分數) as 總分 from 學生分數 group by 學期, 姓名) a group by 學期; --按學期迴圈 select 課程, avg(分數) as 平均分,學期 from 學生分數 group by 學期, 課程; --各科平均分Table select 學期,姓名, avg(分數) as 學生學期平均分 from 學生分數 group by 學期, 姓名; -- 按學期\學生迴圈 select 學期,課程,分數,姓名,0 as summary from 學生分數 --每個學期當前學生的各科分數 table union all select 學期,'',sum(分數),姓名,1 from 學生分數 group by 學期, 姓名;--合計 select 課程, avg(分數) as 平均分 from 學生分數 group by 課程; DECLARE @sql_col VARCHAR(8000); SELECT @sql_col = ISNULL(@sql_col + ',','') + QUOTENAME(課程) FROM 學生分數 GROUP BY 課程; DECLARE @sql VARCHAR(8000); select @sql = ' SELECT * FROM ( select 學期,課程, avg(分數) as 平均分 from 學生分數 group by 學期, 課程 ) as tb pivot( MAX(平均分) FOR 課程 in ('+ @sql_col +')) a'; exec(@sql); --圖表1 月/人報修柱狀圖 select 姓名,課程,分數,學期 from 學生分數 --每個學期當前學生的各科分數 table select max(分數) as 最高分,avg(分數) as 平均分,GETDATE() as 報告時間 from 學生分數;--綜述 ENDView Code
返回結果如下:
一共返回8張表