| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
雷速体育发帖软件开发QQ118000023C语言培训|一对一辅导|零基础学编程LightningChart 快速先进的.Net图表控件
共有 1453 人关注过本帖
标题:同分同名次排名问题
只看楼主 收藏
分号
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-12-4
结帖率:100%
  已结贴   问题点数:10  回复次数:21   
同分同名次排名问题
程序代码:
*--计算语文班名次
SELECT xm,bj,0000 AS ywbjmc FROM yclk ORDER BY bj,语文 DESC INTO CURSOR T1 readwrite
SELECT T1
lcBJ=ALLTRIM(bj)
I=1
SCAN
IF ALLTRIM(bj)<>lcBJ
lcBJ=ALLTRIM(bj)
I=1
ENDIF
REPLACE ywbjmc WITH I
I=I+1
ENDSCAN
SCAN
UPDATE yclk SET ywbjmc=T1.ywbjmc WHERE xm=T1.xm AND bj=T1.bj
ENDSCAN
*--计算语文年级名次
SELECT xm,bj,0000 AS ywnjmc FROM yclk ORDER BY 语文 DESC INTO CURSOR T1 readwrite

UPDATE T1 SET ywnjmc=RECNO()
SCAN
UPDATE yclk SET ywnjmc=T1.ywnjmc WHERE xm=T1.xm AND bj=T1.bj
ENDSCAN


这个方法不能完成同分同名次。怎么解决?同时排出来班级名次,年级名次。
2017-10-28 11:34
分号
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-12-4
  得分:0 


数据表
附件: 您没有浏览附件的权限,请 登录注册
2017-10-28 11:36
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:164
帖 子:7099
专家分:16663
注 册:2012-2-5
  得分:0 
存在与 在路上666666 同学的表结构相同的问题
排名次问题见:
https://bbs.bccn.net/thread-481835-1-1.html
2017-10-28 11:41
分号
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-12-4
  得分:0 
已经排出来了,就是不能同分同名次。。
2017-10-28 11:50
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:164
帖 子:7099
专家分:16663
注 册:2012-2-5
  得分:0 
回复 4楼 分号
那个帖子中的代码示例看了吗
2017-10-28 12:02
分号
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-12-4
  得分:0 
在看,暂时还研究懂。
2017-10-28 12:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:164
帖 子:7099
专家分:16663
注 册:2012-2-5
  得分:0 
那个帖子的排名类似年级+科目排名次
班级+科目的排名差不多,只不过是排序或者索引方式不同而已。
2017-10-28 12:17
分号
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-12-4
  得分:0 
能在原基础上修改一下吗?
2017-10-28 12:17
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:164
帖 子:7099
专家分:16663
注 册:2012-2-5
  得分:0 
你的表结构写代码累人
核心代码已经给你了,周末也没什么事慢慢研究吧

[此贴子已经被作者于2017-10-28 12:29编辑过]

2017-10-28 12:28
分号
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-12-4
  得分:0 
程序代码:
clear memory
clear
set talk off

use jf
go top
do while .not. eof()
    store 1 to ywjf0,sxjf0,yyjf0,wljf0,hxjf0,swjf0,lsjf0,zzjf0,dljf0,zfjf0
    yw0=ywjf
    sx0=sxjf
    yy0=yyjf
    wl0=wljf
    hx0=hxjf
    sw0=swjf
    ls0=lsjf
    zz0=zzjf
    dl0=dljf
    zf0=zfjf
    n=recno()
    类别0=类别
    go top
       do while .not. eof()
        if 类别0<>类别
        skip
        loop
        endif
        if yw0<ywjf
        ywjf0=ywjf0+1
        endif
       if sx0<sxjf
        sxjf0=sxjf0+1
        endif
        if yy0<yyjf
        yyjf0=yyjf0+1
        endif
           if wl0<wljf
        wljf0=wljf0+1
        endif
        if hx0<hxjf
        hxjf0=hxjf0+1
        endif
        if sw0<swjf
        swjf0=swjf0+1
        endif
        if ls0<lsjf
        lsjf0=lsjf0+1
        endif
        if zz0<zzjf
        zzjf0=zzjf0+1
        endif
        if dl0<dljf
        dljf0=dljf0+1
        endif
        if zf0<zfjf
        zfjf0=zfjf0+1
        endif
        if 类别=" "
        ywjf0=0
        sxjf0=0
        yyjf0=0
        wljf0=0
        hxjf0=0
        swjf0=0
        zzjf0=0
        lsjf0=0
        dljf0=0
        zfjf0=0
        endif
        skip
       enddo
    go n
    repl ywjfmc with ywjf0,sxjfmc with sxjf0,yyjfmc with yyjf0,;
wljfmc with wljf0,hxjfmc with hxjf0,swjfmc with swjf0,lsjfmc with lsjf0,zzjfmc with zzjf0,;
dljfmc with dljf0,zfjfmc with zfjf0
    skip
enddo
use
set talk on


用了个笨方法,解决了。还有好的方法吗?
2017-10-28 17:28







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

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