本帖最后由 快表帝国客服01 于 2024-8-7 15:01 编辑
需求:依据各班同学各科目的成绩,按设定的分段计算出优秀率、优良率、及格率等。
实现:表间公式
写法:
下面截图是导入的各班同学各科目的成绩:
最终得到下面的结果
下面是写法:
- Set NoCount On
- 定义变量 @Field AS VARCHAR(20);
- 定义变量 @Cname AS VARCHAR(20);
- 定义变量 @sql AS VARCHAR(max);
- IF Object_id( 'tempdb..#ScoreAnalysisResult' ) IS NOT NULL
- DROP TABLE #ScoreAnalysisResult
- CREATE TABLE #ScoreAnalysisResult
- (
- 学年 VARCHAR(50),
- 班级 VARCHAR(10),
- 科目 VARCHAR(10),
- 年级平均分 NUMERIC(18, 2),
- 班级平均分 NUMERIC(18, 2),
- 优秀率 NUMERIC(18, 4),
- 良好率 NUMERIC(18, 4),
- 及格率 NUMERIC(18, 4)
- )
- 定义变量 Cursor1 CURSOR FOR
- SELECT 'F_200' ,'语文'
- UNION SELECT 'F_201' ,'数学'
- UNION SELECT 'F_202' ,'英语'
- UNION SELECT 'F_203' ,'物理'
- UNION SELECT 'F_204' ,'化学'
- UNION SELECT 'F_205' ,'生物'
- UNION SELECT 'F_206' ,'历史'
- UNION SELECT 'F_207' ,'地理'
- UNION SELECT 'F_231' ,'政治'
- OPEN Cursor1
- Fetch Next FROM Cursor1 INTO @Field, @cname
- WHILE @@Fetch_STATUS = 0
- BEGIN
- 设置变量值 @sql ='
- Insert Into #ScoreAnalysisResult(学年,班级,科目,年级平均分,班级平均分,优秀率,良好率,及格率)
- Select Distinct
- F_237 As 学年
- ,F_199 As 班级
- ,''' + @Cname + ''' As 科目
- ,Avg(' + @Field + ') Over() As 年级平均分
- ,Avg(' + @Field + ') Over(Partition By F_199) As 班级平均分
- ,四舍五入(Cast(Count(Case When ' + @Field + '>=120 Then 1 Else Null end ) Over(Partition By F_199) As Float) / Cast(Count(F_198) Over(Partition By F_199 ) As Float) ,4) As 优秀率
- ,四舍五入(Cast(Count(Case When ' + @Field + '>=100 Then 1 Else Null end ) Over(Partition By F_199) As Float) / Cast(Count(F_198) Over(Partition By F_199 ) As Float) ,4) As 良好率
- ,四舍五入(Cast(Count(Case When ' + @Field + '>=90 Then 1 Else Null end ) Over(Partition By F_199) As Float) / Cast(Count(F_198) Over(Partition By F_199 ) As Float) ,4) As 及格率
- From T_36,T_37 Where 1=1 并且 T_36.ID = T_37.ID '
- EXEC(@sql)
- Fetch Next FROM Cursor1 INTO @Field, @cname
- END
- CLOSE Cursor1
- DEALLOCATE Cursor1
- SELECT 排除重复
- 班级 AS 本报表.[学生考试成绩分析_明细表].[所代班级]x填充不锁定,
- 科目 AS 本报表.[学生考试成绩分析_明细表].[学科]x填充不锁定,
- 优秀率 AS 本报表.[学生考试成绩分析_明细表].[优秀率]x填充不锁定,
- 良好率 AS 本报表.[学生考试成绩分析_明细表].[良好率]x填充不锁定,
- 及格率 AS 本报表.[学生考试成绩分析_明细表].[及格率]x填充不锁定,
- 班级平均分 AS 本报表.[学生考试成绩分析_明细表].[平均分]x填充不锁定
- FROM #ScoreAnalysisResult
- WHERE 1=1
- Order By 班级,科目 Desc
- Set NoCount Off
复制代码
|
|
快表帝国客服01