如何快速计算名次并更新(100)

  • 主题发起人 主题发起人 w1229
  • 开始时间 开始时间
W

w1229

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个access表:姓名 得分 名次张三 98.1 1李四 79.2 3王五 98.1 1……………………如何用delphi快速地计算名次并更新
 
下面是本人原来发的一个帖子,是针对VFP9.0的,估计对其他数据库也是可行的,如果有问题应该也只需要小小的修改一下&&全市排名UPDATE szcjk SET qspm=(select COUNT(a.bmh)+1 from szcjk as a WHERE a.zf>szcjk.zf)&&县区排名UPDATE szcjk SET xqpm=(select COUNT(a.bmh)+1 from szcjk as a WHERE a.zf>szcjk.zf AND a.xqdh=szcjk.xqdh)PS:今天用到时搞出来的,现在搜索本站没有,特与大家分享。再PS:后来一搜发现其他人早就想出类似的方法,有点受打击
 
引用:你应该把表放上去,别人也好看明白。有点道理,我就再说明几句。1、关于表的结构qspm、xqpm:分别为全市排名和各县区排名bmh:报名号,用以区分学生zf:总分xqdh:县区代号,用以区分学生是哪个县的2、原理说明UPDATE 表名 SET 字段名=[子查询]利用子查询求得各个学生的名次3、要点update 和子查询针对的实际上是同一个表,通过表的别名(from szcjk as a )来区分字段是UPDATE后的表中的呢还是子查询中的如果还是不明白,我也没办法了
 
看看这个,可能对你有帮助。http://hi.baidu.com/studysky/blog/item/bb8a2433af10dffc1b4cff27.html
 
VF我知道,但我用DELPHI+ACCESS,如何快速地完成.
 
数据表(成绩)字段: ID,姓名,得分,名次Select ID, (Select count(*) from 成绩 b where b.得分<=a.得分) AS 名次 into Temp_AFrom 成绩 aUpdate 成绩 inner join Temp_A on 成绩.ID=Temp_A.IDSet 成绩.名次= Temp_A.名次Drop Table Temp_A
 
这个虽然是针对VF的,但是采用的是纯SQL命令实现的,我已经说得清楚了,我的SQL应该在VF中和其他数据库是一样的,可以通用的
 
没错,你的sql在 sql server,oracle,db2, mysql 都可以运行,唯独在access中不可以通过!别太自信,测试后再说。
 
ACCESS中的确没有测试过,不过我想楼主根据这个思路应该可以轻松地修改吧,如果真改不了,我也无话可说了![:(]
 
怎样在delphi中用写代码最简单:
 
不要用代码写,还是把这些操作都交给数据库,速度等都好处理,lps说的真的满好的,你自己多试下
 
你要是在access2003或低于该版本的数据库中,实现类似 UPDATE szcjk SET qspm=(select COUNT(a.bmh)+1 from szcjk as a WHERE a.zf>szcjk.zf) 的SQL,我也给你100分。
 
看来该我出手了。表定义和数据如下FName FScore FRankaaa 98.1 bbb 79.2 ccc 98.1 ddd 96.5 eee 99.3 执行sql文UPDATE FTable As T1 SET T1.FRank = DCount("FName", "FTable", "FScore >" & T1.FScore & "")+1
 
高人!测试通过,收藏!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部