注册 登录
编程论坛 VFP论坛

如何能做到相同分数或相邻分数同一班级学生排序不相邻

bcly0808 发布于 2022-05-19 08:42, 2016 次点击
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
12 回复
#2
laowan0012022-05-19 09:15
这种需求还是头回见
感觉需要加个字段记录原始排序位置,写程序调整已排序的相对位置
#3
easyppt2022-05-19 09:35
如果index 中的简单表达式 解决不了的话,就只能写代码了,增加一个 px 字段,然后通过程序确定每条记录的实际顺序,并更新到px字段中,最后 index on px  这个字段。
比如常规的 递归排序、冒泡排序  可以参考一下。
#4
sdta2022-05-19 12:27
相邻分数的标准是什么
#5
bcly08082022-05-19 13:50
回复 4楼 sdta
例如上图中的648和645分,来自同一班级,具体几分值没有标准
#6
hu9jj2022-05-19 16:55
这种类似人工智能的算法在VFP中实现起来比较麻烦,需要很多IF来判断和处理。可以尝试先按照分类+班级排序,如同楼主的表,然后再用IF语句排座。
#7
zhken2022-05-20 01:16
不用太纠结,可以用笨方试试,先将分数排好,结合循环+if+标记的排除法,逐行扫描,再写入新的表,先解决了问题,再来琢磨更完美的方法
#8
gs25367856782022-05-21 09:36
实在不理解,这样的排序,有啥用处?
#9
my23182022-05-21 10:42
估计根据考试成绩排下次的考试座次,避免同班同学前后桌
#10
zhken2022-05-21 11:50

*试下



SELECT * FROM PX.DBF INTO CURSOR FXCURSOR ORDER BY 总分赋分 DESC READWRITE
SELECT PX
USE

SELECT FXCURSOR
GO TOP
b1=ALLTRIM(班级)
x1=ALLTRIM(姓名)
f1=总分赋分
DELETE

IF USED('aa')
SELECT aa
USE
ENDIF
CREATE CURSOR AA(x C(10),B C(10), f n(10))
APPEND BLANK
REPLACE X WITH X1 ,b WITH b1
REPLACE f WITH f1


DO WHILE .t.

SELECT FXCURSOR
LOCATE FOR .not. b1=ALLTRIM(班级) .and. .not. delete()

IF FOUND()
    b2=ALLTRIM(班级)
    x2=ALLTRIM(姓名)
    f2=总分赋分
    f1=总分赋分
    b1=ALLTRIM(班级)
    x1=ALLTRIM(姓名)
    dele
    SELECT aa
    APPEND BLANK
    REPLACE x WITH x2,b WITH b2,f WITH f2
   
    LOOP

ELSE

LOCATE FOR .not.delete()

IF FOUND()
    b2=ALLTRIM(班级)
    x2=ALLTRIM(姓名)
    f2=总分赋分
    f1=总分赋分
    b1=ALLTRIM(班级)
    x1=ALLTRIM(姓名)
    dele
    SELECT aa
    APPEND BLANK
    REPLACE x WITH x2,b WITH b2,f WITH f2
ELSE
    exit
ENDIF


ENDIF

ENDDO

SELECT FXCURSOR
USE
SELECT aa
BROWSE
#11
bcly08082022-05-21 11:51
回复 9楼 my2318
是的
#12
bcly08082022-05-21 12:07
回复 10楼 zhken
感谢!运行了,是想要呈现的结果
#13
独木星空2022-05-21 21:19
回复 楼主 bcly0808
相同分数同班不连排还说的过去(因为排名的话,都是同一个班的造成不公平),相邻分数同班不连续,把他班底分数的排在之间有些奇葩,另类,咋想的?
1