| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3124 人关注过本帖
标题:求助:让考生,按总分进行全县排名和本学校排名,并更新两个排名字段。
取消只看楼主 加入收藏
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:4 
求助:让考生,按总分进行全县排名和本学校排名,并更新两个排名字段。
**全县排名
*相同分数占名次(12245668……)
SELECT zf,RECNO() qxpm FROM (SELECT DISTINCT zf FROM zk11222019 ORDER BY zf DESC) A INTO CURSOR T1
UPDATE zk11222019 SET qxpm=(SELECT COUNT(*)+1 FROM zk11222019 t1 WHERE zk11222019.zf<t1.zf)

全县排名,按在咱们论坛上搜索到的帖子,测试了一下可以实现,字段qxpm是全县排名。
学校排名,就不知道如何弄了,各个学校的数据都混在这一个表中,字段xxpm是学校排名。
如何按毕业学校字段(Byxx)分组统计考生在本学校的排名,然后更新到xxpm字段中。
图片附件: 游客没有浏览图片的权限,请 登录注册



附dbf表:

zk11222019.rar (27.33 KB)


[此贴子已经被作者于2019-8-8 16:49编辑过]

搜索更多相关主题的帖子: 总分 排名 学校 更新 字段 
2019-08-08 16:35
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
收藏
得分:0 
回复 2楼 schtg
select * from zk1122 into table _LS
UPDATE _ls SET xxpm=(SELECT COUNT(*)+1 FROM _ls B WHERE _ls.zf<B.zf AND _ls.byxx=B.byxx)

麻烦老师指点一下,这个红色部分,感觉命令中也没有生成这个表,这个在命令中有什么特别含义和作用吗?


一个按钮里加了下面这两行命令,测试了一下,感觉是可以达到全县排名和各自学校排名的目的,运行时感觉有些迟钝(表中有5000条记录),是不是这个代码有什么问题,需要精简一下?

UPDATE zk1122 SET qxpm=(select COUNT(*)+1 from zk1122 as a WHERE a.zf>zk1122.zf)  && 全县名次
UPDATE zk1122 SET xxpm=(select COUNT(*)+1 from zk1122 as a WHERE a.zf>zk1122.zf AND a.byxx=zk1122.byxx)  && 学校名次

这个表a,也不知道是怎么来的,也不知道起什么作用,麻烦知道的老师指点一下。

[此贴子已经被作者于2019-8-12 10:22编辑过]

2019-08-12 09:40
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
收藏
得分:0 
谢谢,我下来测试一下。
2019-08-12 18:39
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
收藏
得分:0 
回复 5楼 wengjl
程序代码:
CLOSE DATABASES 
SELECT 0
USE zkcj  &&打开成绩表zkcj

SELECT * from zkcj orde by byxx,zf desc into cursor temp READWRITE  &&打开成绩表zkcj,按byxx,zf两个字段降序(orde by * descend,的作用是按某个字段降序排列,升序是ascend),排列生成临时表temp(与原表结构完全相同),允许写入。
SELECT temp  &&打开临时表temp
GO TOP   &&到表第一行
cbj=temp.byxx  &&让变量cbj等于临时表byxx字段,这一句作用是什么?
DO whil not EOF() &&作用:只要不到文件尾,就不退出循环
  nmcz=1      && 总名次
  nmcd=1      && 相同名次
  ntot=temp.zf &&让ntot等于临时表总分。不知道怎么理解
  REPLACE temp.xxpm with nmcd  &&替换临时表的学校排名为nmcd
  DO whil not EOF() and temp.byxx=cbj   &&&& 遇到不同校(班)了退出。
    SKIP  &&下移一条记录
    nmcz=nmcz+1  &&总名次+1
    IF temp.zf=ntot   &&不知道怎么理解
      REPLACE temp.xxpm with nmcd  &&替换临时表xxpm为相同名次
    ELSE
      nmcd=nmcz
      REPLACE temp.xxpm with nmcd  &&替换
      ntot=temp.zf
    ENDIF   
  ENDDO
  cbj=temp.byxx &&这一句的作用?
ENDDO         &&& 完成名次的计算
*----
SELECT temp
SCAN
  SELECT zkcj
  LOCATE for zkcj.zkzh ==temp.zkzh        &&&&& 表中加了准考证号(zkzh)是作为唯一标识码使用的
  IF FOUND()
    REPLACE zkcj.xxpm with temp.xxpm
  ENDIF 
  SELECT temp
ENDSCAN       &&& 将计算结果写回到表
RETURN 


cbj=temp.byxx  &&让变量cbj等于临时表byxx字段,这一句作用是什么?
DO whil not EOF() &&作用:只要不到文件尾,就不退出循环
  nmcz=1      && 总名次
  nmcd=1      && 相同名次
  ntot=temp.zf &&让ntot等于临时表总分。不知道怎么理解
  REPLACE temp.xxpm with nmcd  &&替换临时表的学校排名为nmcd
  DO whil not EOF() and temp.byxx=cbj   &&&& 遇到不同校(班)了退出。
    SKIP  &&下移一条记录
    nmcz=nmcz+1  &&总名次+1
    IF temp.zf=ntot   &&不知道怎么理解
      REPLACE temp.xxpm with nmcd  &&替换临时表xxpm为相同名次
    ELSE
      nmcd=nmcz
      REPLACE temp.xxpm with nmcd  &&替换
      ntot=temp.zf
    ENDIF   
  ENDDO
  cbj=temp.byxx &&这一句的作用?
ENDDO         &&& 完成名次的计算


我基础太差了,老师给了代码,我一句一句的研究,也是看不明白,看看哪位老师能给备注一下每一句的作用及含义。
有的备注是我自己加的,也可能不对

[此贴子已经被作者于2019-8-13 11:14编辑过]

2019-08-13 11:08
wyzeaaa
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2019-6-4
收藏
得分:0 
以下是引用wengjl在2019-8-14 13:11:32的发言:

cbj=temp.byxx  &&让变量cbj等于临时表byxx字段,这一句作用是什么? 后面有注释:遇到不同校(班)了退出,开始下一个学校(班),下一个学校了的变量转换就是你的第三问。

IF temp.zf=ntot   &&不知道怎么理解。  下一句就是注释:为了你的同分记同名次

  cbj=temp.byxx &&这一句的作用?    开始新的学校

这些都是变量的转换。关键靠你自己悟,悟空了才行



谢谢,我都记下来了,逐句练习研究。
2019-08-14 16:41
快速回复:求助:让考生,按总分进行全县排名和本学校排名,并更新两个排名字段。
数据加载中...
 
   



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

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