标题:已知年级总成绩库,求各单科的年级名次和班级名次,解释其原理,写出代码, ...
只看楼主
sdaqlf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-8-1
结帖率:50%
已结贴  问题点数:20 回复次数:16 
已知年级总成绩库,求各单科的年级名次和班级名次,解释其原理,写出代码,求高手指招。
已知年级总成绩库,求各单科的年级名次和班级名次,解释其原理,写出代码,求高手指招。
搜索更多相关主题的帖子: 总成绩 原理 代码 
2017-08-01 10:00
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
按成绩从大到小排队
2017-08-01 10:58
sdaqlf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-8-1
得分:0 
回复 2楼 吹水佬
关键是如何求班内名次呀
2017-08-01 12:07
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:5 

坚守VFP最后的阵地
2017-08-01 13:12
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:5 
以下是引用sdaqlf在2017-8-1 12:07:03的发言:

关键是如何求班内名次呀

drop table #成绩
create table #成绩(学号 varchar(6),语文 numeric(5,2),数学 numeric(5,2),英语 numeric(5,2),总分 numeric(5,2))
insert into #成绩(学号,语文,数学,英语,总分)
select '1002',90,80,85,255 union all
select '1001',90,90,90,270 union all
select '1006',95,90,95,280 union all
select '1003',80,80,90,250 union all
select '1004',90,90,95,275 union all
select '1005',90,90,90,270

select * from #成绩

select 学号,总分,isnull((select count(1) from #成绩 where 总分>a.总分),0) +1 as 排名
from #成绩 as a
2017-08-01 13:43
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
是你是要上面的效果,如果是,改改就可以在VFP9上运行了.
*!* 构造数据
create cursor 成绩(学号 C(6),语文 N(6,2),数学 N(6,2),英语 N(6,2),总分 N(6,2))
insert into 成绩(学号,语文,数学,英语,总分) values('1002',90,80,85,255)
insert into 成绩(学号,语文,数学,英语,总分) values('1001',90,90,90,270)
insert into 成绩(学号,语文,数学,英语,总分) values('1006',95,90,95,280)
insert into 成绩(学号,语文,数学,英语,总分) values('1003',80,80,90,250)
insert into 成绩(学号,语文,数学,英语,总分) values('1004',90,90,95,275)
insert into 成绩(学号,语文,数学,英语,总分) values('1005',90,90,90,270)

brow

*!* 根据总分排名,相同名次并列
select 学号,总分,nvl((select count(1) from 成绩 where 总分>a.总分),0) +1 as 排名 from 成绩 as a INTO CURSOR tmp_成绩

SELECT tmp_成绩

BROWSE
2017-08-01 13:55
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
上面用SQL语法做的,如果你用VFP代码做的,你看4楼.
2017-08-01 13:57
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用sdaqlf在2017-8-1 12:07:03的发言:

关键是如何求班内名次呀

名次与排队次序有关吧
2017-08-01 14:07
sdaqlf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-8-1
得分:0 
感谢四楼,麻烦给解释排名次原理
* 班级名次
mc=1 && 记录班级名次
nzf=0 && 记录上条记录的总分
cbj="" && 记录班级名称
nrs=1 && 记录班级人数
SCAN
    IF ALLTRIM(班级)!=cbj
        STORE 1 TO nrs,mc
    ELSE
        IF 总分!=nzf
            mc=nrs
        ENDIF
    ENDIF
    REPLACE 班级名次 WITH mc
    nrs=nrs+1
    nzf=总分
    cbj=ALLTRIM(班级)
ENDSCAN
SET ORDER TO
2017-08-01 17:41
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 9楼 sdaqlf
没有自学能力是学不好VFP的

坚守VFP最后的阵地
2017-08-01 19:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-479731-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.388002 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved