各位老师,这段代码错误在哪儿?xx
现有一chengji.dbf表,字段为学号,姓名,语文,数学,英语,物理,化学,生物,历史,地理,政治。学号为字符型主字段前2位为年级,3到4位为班级,5到6位为考号,如何求各各年级的各班级的各学科的前45名(按学科成绩排序)的平均分?最后结果的形式为
年级 班级 语文,数学,英语,物理,化学,生物,历史,地理,政治.
* 创建临时表用于存储结果
CREATE CURSOR result (年级 C(2), 班级 C(2), 语文 N(6,2), 数学 N(6,2), 外语 N(6,2), 物理 N(6,2), 化学 N(6,2), 生物 N(6,2), 历史 N(6,2), 地理 N(6,2), 政治 N(6,2))
* 定义科目数组
DIMENSION aSubjects[9]
aSubjects[1] = "语文"
aSubjects[2] = "数学"
aSubjects[3] = "外语"
aSubjects[4] = "物理"
aSubjects[5] = "化学"
aSubjects[6] = "生物"
aSubjects[7] = "历史"
aSubjects[8] = "地理"
aSubjects[9] = "政治"
* 获取所有不同的年级和班级组合
SELECT DISTINCT SUBSTR(ALLTRIM(学号), 1, 2) AS 年级, SUBSTR(ALLTRIM(学号), 3, 2) AS 班级 ;
FROM chengji ;
INTO CURSOR crsGradeClass
SCAN
lcGrade = crsGradeClass.年级
lcClass = crsGradeClass.班级
LOCAL ARRAY aAvgScores(9)
aAvgScores = 0
FOR nSubject = 1 TO 9
lcSubject = aSubjects[nSubject]
* 对每个科目按成绩排序并取前45名的成绩计算平均值
SELECT 学号, &lcSubject AS score ;
FROM chengji ;
WHERE SUBSTR(ALLTRIM(学号), 1, 4) = lcGrade + lcClass ;
ORDER BY score DESC ;
INTO CURSOR temp_scores
IF RECCOUNT() >= 45
SELECT AVG(score) FROM (SELECT TOP 45 score FROM temp_scores) INTO ARRAY aAvgScore
ELSE
SELECT AVG(score) FROM temp_scores INTO ARRAY aAvgScore
ENDIF
aAvgScores[nSubject] = aAvgScore[1]
USE IN temp_scores
ENDFOR
INSERT INTO result (年级, 班级, 语文, 数学, 外语, 物理, 化学, 生物, 历史, 地理, 政治) ;
VALUES (lcGrade, lcClass, aAvgScores[1], aAvgScores[2], aAvgScores[3], aAvgScores[4], aAvgScores[5], aAvgScores[6], aAvgScores[7], aAvgScores[8], aAvgScores[9])
ENDSCAN
* 显示结果
SELECT result
BROWSE