如果在统计结果中接一个字段累人数计字段就好了。因为那样才是我们经常想用的结果。
每次我都是统计出分段数据导入到excel中继续用公式统计的,那位帮帮提示一下。
每次我都是统计出分段数据导入到excel中继续用公式统计的,那位帮帮提示一下。
程序代码:*-创建一个分数段标准表,这个标准表可以是自由表,也可以是临时表
CREATE CURSOR bz (下限 N(3),上限 N(3))
NUM=10 && 10分一个分数段,或者手工建一个自由表,前提是分数必须为整数
FSD=80 && 共设置FSD个分数段
FOR I=1 TO FSD
IF I=1
INSERT INTO BZ VALUES (0,NUM-I)
ELSE
INSERT INTO BZ VALUES (NUM1+1,NUM1+NUM)
ENDIF
NUM1=上限
ENDFOR
CREATE CURSOR T2 (班级 C(4),课程 C(10),档次 C(10),人数 N(4)) && 保存统计结果的临时表
SELECT 班级,[语文] 课程,语文 成绩 FROM CJ ;
UNION ALL SELECT 班级,[数学] SX,数学 FROM CJ ;
UNION ALL SELECT 班级,[综合] ZH,综合 FROM CJ ;
UNION ALL SELECT 班级,[英语] YY,英语 FROM CJ ;
UNION ALL SELECT 班级,[总分] ZF,总分 FROM CJ INTO CURSOR T0
SELECT BZ
SCAN
INSERT INTO T2 SELECT 班级,课程,PADL(BZ.下限,3,[0])+[-]+PADL(BZ.上限,3,[0]),COUNT(*) FROM T0 GROUP BY 1,2 WHERE BETWEEN(成绩,BZ.下限,BZ.上限)
ENDSCAN
CREATE CURSOR FSTJ (档次 C(7),语文 N(3),数学 N(3),综合 N(3),英语 N(3),总分 N(3))
INSERT INTO FSTJ (档次) SELECT PADL(BZ.下限,3,[0])+[-]+PADL(BZ.上限,3,[0]) 档次 FROM BZ
SELECT DISTINCT 班级 FROM T0 INTO CURSOR BJ
SCAN
BJ1=班级
BJ=[BJ]+ALLTRIM(班级) &&以班级名称做为表名称
SELECT *,000 小计 FROM FSTJ INTO TABLE &BJ
UPDATE &BJ SET 语文=T2.人数 FROM &BJ INNER JOIN T2 ON &BJ..档次=T2.档次 AND T2.课程=[语文] AND T2.班级==BJ1
UPDATE &BJ SET 数学=T2.人数 FROM &BJ INNER JOIN T2 ON &BJ..档次=T2.档次 AND T2.课程=[数学] AND T2.班级==BJ1
UPDATE &BJ SET 综合=T2.人数 FROM &BJ INNER JOIN T2 ON &BJ..档次=T2.档次 AND T2.课程=[综合] AND T2.班级==BJ1
UPDATE &BJ SET 英语=T2.人数 FROM &BJ INNER JOIN T2 ON &BJ..档次=T2.档次 AND T2.课程=[英语] AND T2.班级==BJ1
UPDATE &BJ SET 总分=T2.人数 FROM &BJ INNER JOIN T2 ON &BJ..档次=T2.档次 AND T2.课程=[总分] AND T2.班级==BJ1
SELECT (BJ)
REPLACE ALL 小计 WITH 语文+数学+综合+英语
INSERT INTO (BJ) SELECT [合计],SUM(语文),SUM(数学),SUM(综合),SUM(英语),SUM(总分),SUM(小计) FROM (BJ)
ENDSCAN

程序代码:*-创建一个分数段标准表,这个标准表可以是自由表,也可以是临时表
CREATE CURSOR bz (下限 N(3),上限 N(3))
NUM=10 && 10分一个分数段,或者手工建一个自由表,前提是分数必须为整数
FSD=80 && 共设置FSD个分数段
FOR I=1 TO FSD
IF I=1
INSERT INTO BZ VALUES (0,NUM-I)
ELSE
INSERT INTO BZ VALUES (NUM1+1,NUM1+NUM)
ENDIF
NUM1=上限
ENDFOR
* 统一格式,便于统计
SELECT 班级,[语文] 课程,语文 成绩,SPACE(7) 分数段 FROM CJ ;
UNION ALL SELECT 班级,[数学] SX,数学,SPACE(7) 分数段 FROM CJ ;
UNION ALL SELECT 班级,[综合] ZH,综合,SPACE(7) 分数段 FROM CJ ;
UNION ALL SELECT 班级,[英语] YY,英语,SPACE(7) 分数段 FROM CJ ;
UNION ALL SELECT 班级,[总分] ZF,总分,SPACE(7) 分数段 FROM CJ INTO CURSOR T0 READWRITE
*BROWSE && 可以查看内容
* 划分分数段
UPDATE T0 SET 分数段=PADL(BZ.下限,3,[0])+[-]+PADL(BZ.上限,3,[0]) FROM BZ WHERE BETWEEN(T0.成绩,BZ.下限,BZ.上限)
* 统计不同分数段的人数
SELECT 班级,课程,分数段,COUNT(*) 人数 FROM T0 GROUP BY 1,2,3 INTO CURSOR T2
* 生成统计结果的模板
CREATE CURSOR FSTJ (分数段 C(7),语文 N(3),数学 N(3),综合 N(3),英语 N(3),总分 N(3))
INSERT INTO FSTJ (分数段) SELECT PADL(BZ.下限,3,[0])+[-]+PADL(BZ.上限,3,[0]) 档次 FROM BZ
* 生成不重复的班级名称,用于数据统计
SELECT DISTINCT 班级 FROM T0 INTO CURSOR BJ
* 生成最后的统计结果
SCAN
BJ1=班级
BJ=[BJ]+ALLTRIM(班级)
SELECT *,000 小计 FROM FSTJ INTO TABLE &BJ
UPDATE &BJ SET 语文=T2.人数 FROM &BJ INNER JOIN T2 ON &BJ..分数段=T2.分数段 AND T2.课程=[语文] AND T2.班级==BJ1
UPDATE &BJ SET 数学=T2.人数 FROM &BJ INNER JOIN T2 ON &BJ..分数段=T2.分数段 AND T2.课程=[数学] AND T2.班级==BJ1
UPDATE &BJ SET 综合=T2.人数 FROM &BJ INNER JOIN T2 ON &BJ..分数段=T2.分数段 AND T2.课程=[综合] AND T2.班级==BJ1
UPDATE &BJ SET 英语=T2.人数 FROM &BJ INNER JOIN T2 ON &BJ..分数段=T2.分数段 AND T2.课程=[英语] AND T2.班级==BJ1
UPDATE &BJ SET 总分=T2.人数 FROM &BJ INNER JOIN T2 ON &BJ..分数段=T2.分数段 AND T2.课程=[总分] AND T2.班级==BJ1
SELECT (BJ)
REPLACE ALL 小计 WITH 语文+数学+综合+英语
INSERT INTO (BJ) SELECT [合计],SUM(语文),SUM(数学),SUM(综合),SUM(英语),SUM(总分),SUM(小计) FROM (BJ)
BROWSE
ENDSCAN
