以下是引用TonyDeng在2015-8-18 17:44:45的发言:
你这个表是会随着时间的推移不断增大的,统计动作不能聚集在原表上。
你这个表是会随着时间的推移不断增大的,统计动作不能聚集在原表上。
那应该是怎么一个思想呢?请版主明示。
CLOSE DATABASES CLEAR ALL USE CHENGJIBIAO ALIAS CJB IN 0 NZDS=AFIELDS(AZDM) USE IN CJB * 生成SQL查询字段列表(好处在于不需要知道科目字段的排列顺序,只要科目字段排在一起就可以了) CSQL="SELECT 考试ID,班级ID" FOR LNI=4 TO NZDS && 从第4列开始统计 CSQL=CSQL+",CAST(AVG("+AZDM[LNI,1]+") AS N(6,2)) "+AZDM[LNI,1]+"均分,000 "+AZDM[LNI,1]+"名次"+IIF(LNI<NZDS,""," FROM CHENGJIBIAO GROUP BY 1,2 INTO CURSOR CJTJB READWRITE") ENDFOR *MESSAGEBOX(CSQL,64,"生成代码提示") EXECSCRIPT(CSQL) * 排名次(如果更新数据超过5000条,要考虑用VFP写代码了) NZDS=AFIELDS(AZDM) FOR LNI=3 TO NZDS STEP 2 A1="CJTJB."+AZDM[LNI,1] && 科目均分 B1="CJTJB."+AZDM[LNI+1,1] && 科目名次 A2="B."+AZDM[LNI,1] && 科目均分 UPDATE CJTJB SET &B1=(SELECT COUNT(*)+1 FROM CJTJB B WHERE &A1. <&A2. AND CJTJB.考试ID=B.考试ID) FROM CJTJB WHERE &A1. <>0 ENDFOR * 显示统计结果 BROWSE
FOR LNI = 3 TO nFieldCount STEP 2 A1 = 'CJTJB.' + aFieldList[LNI,1] && 科目均分 B1 = 'CJTJB.' + aFieldList[LNI+1,1] && 科目名次 A2 = 'B.' + aFieldList[LNI,1] && 科目均分 UPDATE CJTJB SET &B1=(SELECT COUNT(*)+1 FROM CJTJB B WHERE &A1.< &A2. AND CJTJB.考试ID = B.考试ID) FROM CJTJB WHERE &A1.<> 0 ENDFOR
UPDATE CJTJB SET CJTJB.语文名次=(SELECT COUNT(*)+1 FROM CJTJB B WHERE CJTJB.语文均分< B.语文均分 AND CJTJB.考试ID = B.考试ID) FROM CJTJB WHERE CJTJB.语文均分<>0