| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 468 人关注过本帖
标题:如何对每条记录前3位成绩进行排序,并将结果保存在对应的px字段中
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:689
专家分:3
注 册:2018-1-4
结帖率:97.6%
收藏
已结贴  问题点数:20 回复次数:9 
如何对每条记录前3位成绩进行排序,并将结果保存在对应的px字段中


我想对每条记录成绩前3位的学科进行排名,并将结果(字段名)保存在字段px 中,不知如何操作,请高手赐教,万分感谢!!!

CREATE dbf tt(xm C(12),语文n(5,1),数学n(5,1),英语 n(5,1),物理 n(5,1),化学n(5,1),历史 n(5,1),地理 n(5,1),政治 n(5,1),生物n(5,1),pc C(20))
INSERT INTO tt values("AAA",51,71,56.7,51,11,30,41,70,22,"")
INSERT INTO tt values("AAB",52,78,56.7,89,12,38,48,79,28,"")
INSERT INTO tt values("AAC",53,56,53,81,13,53,45,39,25,"")
INSERT INTO tt values("AAD",54,54,56.7,49,14,31,46,19,22,"")
INSERT INTO tt values("AAE",55,48,56.7,89,15,33,43,29,26,"")


2025-03-11 10:53
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:339
专家分:826
注 册:2021-11-24
收藏
得分:0 
你的排序要求 描述不是很清晰

1、记录前3位成绩: 指的是什么?所有学科字段的总成绩吗,如果是,那就加个总分字段,然后按照总分字段排序就可以了
2、结果保存在对应的px字段中:指的是什么结果?顺序序号吗

如果不好描述,你也可以把最终的表是啥样子的贴上来

[此贴子已经被作者于2025-3-11 11:27编辑过]

2025-03-11 11:26
王咸美
Rank: 1
等 级:新手上路
帖 子:689
专家分:3
注 册:2018-1-4
收藏
得分:0 
九科成绩排名前三的学科名称进行排名
如:
xm           px
AAA          数学,政治,英语
2025-03-11 11:41
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:339
专家分:826
注 册:2021-11-24
收藏
得分:14 
程序代码:
Create cursor tt(xm C(12),语文 N(5,1),数学 N(5,1),英语 N(5,1),物理 N(5,1),化学 N(5,1),历史 N(5,1),地理 N(5,1),政治 N(5,1),生物 N(5,1),px C(20))
Insert Into tt Values("AAA",51,71,56.7,51,11,30,41,70,22,"")
Insert Into tt Values("AAB",52,78,56.7,89,12,38,48,79,28,"")
Insert Into tt Values("AAC",53,56,53,81,13,53,45,39,25,"")
Insert Into tt Values("AAD",54,54,56.7,49,14,31,46,19,22,"")
Insert Into tt Values("AAE",55,48,56.7,89,15,33,43,29,26,"")

Select * From ( ;
    select xm,'语文' As xk,语文 As cj From tt Union All ;
    select xm,'数学' As xk,数学 As cj From tt Union All ;
    select xm,'英语' As xk,英语 As cj From tt Union All ;
    select xm,'物理' As xk,物理 As cj From tt Union All ;
    select xm,'化学' As xk,化学 As cj From tt Union All ;
    select xm,'历史' As xk,历史 As cj From tt Union All ;
    select xm,'地理' As xk,地理 As cj From tt Union All ;
    select xm,'政治' As xk,政治 As cj From tt Union All ;
    select xm,'生物' As xk,生物 As cj From tt) As mx Into Curs tmp1

Sele tt
Scan All
    Select Top 3 xk From tmp1 Where tmp1.xm=tt.xm Order By cj Desc Into Array myArr
    Repl px With myArr(1)+','+myArr(2)+','+myArr(3)
Endscan
Browse


建议原始表不要以学科建立字段,把学科和成绩做成子表,然后学生是父表,这样比较合理,后面想增加学科也更方便。结果的表其实就是行转列的形式。通过查询就可以得到。

不用SQL方式,你也可以用冒泡排序法处理,也可以的

[此贴子已经被作者于2025-3-11 14:27编辑过]

2025-03-11 14:22
王咸美
Rank: 1
等 级:新手上路
帖 子:689
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!

2025-03-11 14:30
王咸美
Rank: 1
等 级:新手上路
帖 子:689
专家分:3
注 册:2018-1-4
收藏
得分:0 
程序有点问题,请予指正!谢谢!
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


2025-03-11 14:50
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1926
专家分:3757
注 册:2012-2-29
收藏
得分:6 
回复 6楼 王咸美
稍微改动一下即可,但是还应该考虑纳入 与第三名 分数相同的学科。
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
Create cursor tt(xm C(12),语文 N(5,1),数学 N(5,1),英语 N(5,1),物理 N(5,1),化学 N(5,1),历史 N(5,1),地理 N(5,1),政治 N(5,1),生物 N(5,1),px C(20))
Insert Into tt Values("AAA",51,71,56.7,51,11,30,41,70,22,"")
Insert Into tt Values("AAB",52,78,56.7,89,12,38,48,79,28,"")
Insert Into tt Values("AAC",53,56,53,81,13,53,45,39,25,"")
Insert Into tt Values("AAD",54,54,56.7,49,14,31,46,19,22,"")
Insert Into tt Values("AAE",55,48,56.7,89,15,33,43,29,26,"")

Select * From ( ;
    select xm,'语文' As xk,语文 As cj From tt Union All ;
    select xm,'数学' As xk,数学 As cj From tt Union All ;
    select xm,'英语' As xk,英语 As cj From tt Union All ;
    select xm,'物理' As xk,物理 As cj From tt Union All ;
    select xm,'化学' As xk,化学 As cj From tt Union All ;
    select xm,'历史' As xk,历史 As cj From tt Union All ;
    select xm,'地理' As xk,地理 As cj From tt Union All ;
    select xm,'政治' As xk,政治 As cj From tt Union All ;
    select xm,'生物' As xk,生物 As cj From tt) As mx Into TABLE _tmp1

Sele tt
Scan All
    Select Top 3 xk From _tmp1 Where _tmp1.xm=tt.xm Order By cj Desc Into Array myArr
    Repl px With myArr(1)+','+myArr(2)+','+myArr(3)
Endscan
Browse



[此贴子已经被作者于2025-3-11 18:32编辑过]

2025-03-11 18:26
王咸美
Rank: 1
等 级:新手上路
帖 子:689
专家分:3
注 册:2018-1-4
收藏
得分:0 
@schtg 谢谢指导!
字段数值相同的视为同一名次。
第3条记录 px 应显示
        物理,数学,语文,英语,历史

如何达到上述效果,请赐教!谢谢!
        
2025-03-11 18:48
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:339
专家分:826
注 册:2021-11-24
收藏
得分:0 
VFP9环境下,代码是没问题的,你是VFP几?

用 table 关键字,会创建本地表,用cursor是临时表,VFP9下,临时用的表不应该用table
如果你用的是低版本,建议升级到VFP9_7423

我当初就是从VFP6直接跳到这个版本的


相同的名次都显示的话,那么排名 px,你怎么知道,哪些是第一,哪些是第二,哪些是第三 ?
要是考虑并列,那还不如把px分解成3个字段,分别用来表示 前3名,然后并列的都显示在对应的名次字段中

[此贴子已经被作者于2025-3-12 08:26编辑过]

2025-03-12 08:20
王咸美
Rank: 1
等 级:新手上路
帖 子:689
专家分:3
注 册:2018-1-4
收藏
得分:0 
我用的是VFP9.0版本的
2025-03-12 09:41
快速回复:如何对每条记录前3位成绩进行排序,并将结果保存在对应的px字段中
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038696 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved