| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6203 人关注过本帖, 1 人收藏
标题:同分同名次排名问题
只看楼主 加入收藏
分号
Rank: 1
等 级:新手上路
帖 子:156
专家分:0
注 册:2006-12-4
结帖率:77.78%
收藏(1)
已结贴  问题点数:10 回复次数:23 
同分同名次排名问题
程序代码:
*--计算语文班名次
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


这个方法不能完成同分同名次。怎么解决?同时排出来班级名次,年级名次。
搜索更多相关主题的帖子: 同名 语文 SCAN UPDATE SET 
2017-10-28 11:34
分号
Rank: 1
等 级:新手上路
帖 子:156
专家分:0
注 册:2006-12-4
收藏
得分:0 
yclk.zip (12.83 KB)


数据表
2017-10-28 11:36
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
存在与 在路上666666 同学的表结构相同的问题
排名次问题见:
https://bbs.bccn.net/thread-481835-1-1.html

坚守VFP最后的阵地
2017-10-28 11:41
分号
Rank: 1
等 级:新手上路
帖 子:156
专家分:0
注 册:2006-12-4
收藏
得分:0 
已经排出来了,就是不能同分同名次。。
2017-10-28 11:50
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 4楼 分号
那个帖子中的代码示例看了吗

坚守VFP最后的阵地
2017-10-28 12:02
分号
Rank: 1
等 级:新手上路
帖 子:156
专家分:0
注 册:2006-12-4
收藏
得分:0 
在看,暂时还研究懂。
2017-10-28 12:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
那个帖子的排名类似年级+科目排名次
班级+科目的排名差不多,只不过是排序或者索引方式不同而已。

坚守VFP最后的阵地
2017-10-28 12:17
分号
Rank: 1
等 级:新手上路
帖 子:156
专家分:0
注 册:2006-12-4
收藏
得分:0 
能在原基础上修改一下吗?
2017-10-28 12:17
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
你的表结构写代码累人
核心代码已经给你了,周末也没什么事慢慢研究吧

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


坚守VFP最后的阵地
2017-10-28 12:28
分号
Rank: 1
等 级:新手上路
帖 子:156
专家分: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.036413 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved