编程技巧擂台赛[四]
数据表[体考.DBF]结构如下:数据表[标准.DBF]结构如下:
参照数据表[标准.DBF]中的内容,统计出必考分数[必考项目]、抽选分数[抽选项目]、自选分数[自选项目]、备选分数[备选项目]及总分数。
tabl.rar
(73.65 KB)
请朋友们帮助,给出最优方案。
CLOSE DATABASE SELECT ksh,性别,必考项目 AS 考试内容,必考项目数 AS 考试成绩,[必考项目] AS 考试分类 FROM 体考; UNION ALL SELECT ksh,性别,抽选项目 AS 考试内容,抽选项目数 AS 考试成绩,[抽定项目] AS 考试分类 FROM 体考; UNION ALL SELECT ksh,性别,自选项目 AS 考试内容,自选项目数 AS 考试成绩,[自选项目] AS 考试分类 FROM 体考; UNION ALL SELECT ksh,性别,备选项目 AS 考试内容,备选项目数 AS 考试成绩,[备选项目] AS 考试分类 FROM 体考; INTO ARRAY ATK SELECT ksh,性别,必考项目 AS 考试内容,必考项目数 AS 考试成绩,[必考项目] AS 考试分类,00.0 FS FROM 体考 INTO CURSOR TEMP READWRITE ZAP APPEND FROM ARRAY ATK BLANK ALL FIELDS 考试成绩 FOR 考试成绩=0 &&清空[0] UPDATE TEMP SET FS=测试标准.分数 FROM 测试标准 WHERE ALLTRIM(TEMP.考试内容)==ALLTRIM(测试标准.项目名称) AND TEMP.性别==测试标准.性别 AND BETWEEN(考试成绩,测试标准.下限,测试标准.上限) SELECT A.KSH,A.性别,A.必考项目,B.抽定项目,C.自选项目,D.备选项目,A.必考项目数,; B.抽定项目数,C.自选项目数,D.备选项目数,A.FS1,B.FS2,C.FS3,D.FS4,; CAST(A.FS1+B.FS2+C.FS3+D.FS4 AS N(4,1)) 总分 FROM ; (SELECT ksh,性别,考试内容 AS 必考项目,考试成绩 AS 必考项目数,FS AS FS1 FROM TEMP WHERE ALLTRIM(考试分类)==[必考项目]) A,; (SELECT ksh,性别,考试内容 AS 抽定项目,考试成绩 AS 抽定项目数,FS AS FS2 FROM TEMP WHERE ALLTRIM(考试分类)==[抽定项目]) B,; (SELECT ksh,性别,考试内容 AS 自选项目,考试成绩 AS 自选项目数,FS AS FS3 FROM TEMP WHERE ALLTRIM(考试分类)==[自选项目]) C,; (SELECT ksh,性别,考试内容 AS 备选项目,考试成绩 AS 备选项目数,FS AS FS4 FROM TEMP WHERE ALLTRIM(考试分类)==[备选项目]) D WHERE A.KSH==B.KSH AND B.KSH==C.KSH AND C.KSH==D.KSH后来看了大家的贴子后,代码改成以下:
CLOSE DATABASES UPDATE 体考 SET 体考.必考分数=标准.分数 FROM 标准 WHERE 体考.必考项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.必考项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.抽选分数=标准.分数 FROM 标准 WHERE 体考.抽选项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.抽选项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.自选分数=标准.分数 FROM 标准 WHERE 体考.自选项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.自选项目数,标准.下限,标准.上限) UPDATE 体考 SET 体考.备选分数=标准.分数 FROM 标准 WHERE 体考.备选项目==标准.项目名称 AND 体考.性别==标准.性别 AND BETWEEN(体考.备选项目数,标准.下限,标准.上限) SELECT 体考 REPLACE ALL 总分数 WITH 必考分数+抽选分数+自选分数+备选分数 FOR I=11 TO 15 BLANK FIELDS (FIELD(I)) FOR EVALUATE(FIELD(I))=0 ENDFOR BROWSE