Office中国论坛/Access中国论坛

标题: 求助,运动会记分的问题 [打印本页]

作者: lxjii    时间: 2007-8-1 17:43
标题: 求助,运动会记分的问题
论坛改版了,贴不见啦
再来求助一次
名次   得分                      某场比赛结果如下                          
第1名 8                              A      第1名       7                    由于有3名并列第1名,所以第1名的得分为(8+7+6)/3=7
第2名 7                              B      第1名       7
第3名 6                              C      第1名       7
第4名 5                              D      第4名       5                     由于3名并列第1名,则去掉2,3名,取第4名
第5名 4                              E      第5名       4                     
第6名 3                              F      第6名       3
第7名 2                              G      第7名       1.5                  由于有2名并列第7名,得分为(2+1)/2=1.5
第8名 1                              H      第7名       1.5

如何在窗体里面实现~~?
高手们帮帮忙,谢谢!

[ 本帖最后由 lxjii 于 2007-8-7 18:49 编辑 ]
作者: lxjii    时间: 2007-8-3 01:57
来顶顶~
作者: hi-wzj    时间: 2007-8-3 11:52
以前回答过,却遗失了。主要是您的数据库结构有很大的问题需要改进。多看人家做的例子。
作者: lxjii    时间: 2007-8-3 23:08
可是如果不管数据库结构,这公式我觉得也很难解决
版主帮帮忙啊
作者: lxjii    时间: 2007-8-3 23:11
能否推荐几个类似的例子看看
作者: lxjii    时间: 2007-8-4 13:28
默默的顶上~
作者: lxjii    时间: 2007-8-6 16:25
再帮忙瞧瞧这贴啊,急用
作者: sgrshh29    时间: 2007-8-6 16:52
你就取前8名?有没有三个并列的?,最好作个数据表上来,并说明这二个问题.
作者: hi-wzj    时间: 2007-8-6 17:18
既然不想改数据库结构,那手工计算再录入是最简单也是最笨的方法!呵呵。
作者: lxjii    时间: 2007-8-7 18:31
原帖由 sgrshh29 于 2007-8-6 16:52 发表
你就取前8名?有没有三个并列的?,最好作个数据表上来,并说明这二个问题.


只是取前8人。理论上有3个,4个……8个全部都可以并列第1名这样的情况存在

权限不够传附件上来,大概就是这样
名次   得分                      某场比赛结果如下                          
第1名 8                              A      第1名       7                    由于有3名并列第1名,所以第1名的得分为(8+7+6)/3=7
第2名 7                              B      第1名       7
第3名 6                              C      第1名       7
第4名 5                              D      第4名       5                     由于3名并列第1名,则去掉2,3名,取第4名
第5名 4                              E      第5名       4                     
第6名 3                              F      第6名       3
第7名 2                              G      第7名       1.5                  由于有2名并列第7名,得分为(2+1)/2=1.5
第8名 1                              H      第7名       1.5

原帖由 hi-wzj 于 2007-8-6 17:18 发表
既然不想改数据库结构,那手工计算再录入是最简单也是最笨的方法!呵呵。


……数据库结构自然可以随便改,我只是想知道这样的实现方法而已,谢谢。。。

[ 本帖最后由 lxjii 于 2007-8-7 18:49 编辑 ]
作者: sgrshh29    时间: 2007-8-9 10:23
假定某场比赛结果如下:
排名次序排名得分实际名次
181
271
361
454
545
636
727
817

先做一个过渡查询1:
SELECT 表1.[实际名次], First(表1.[排名得分]) AS 得分之First, Count(表1.[实际名次]) AS 名次之Count
FROM 表1
GROUP BY 表1.[实际名次];

再用这个查询2就可以:
SELECT 表1.[实际名次], IIf([名次之Count]=1,[得分之First],iif([名次之Count]=2,[得分之First]-0.5,iif([名次之Count]=3,[得分之First]-1,iif([名次之Count]=4,[得分之First]-1.5,iif([名次之Count]=5,[得分之First]-2,iif([名次之Count]=6,[得分之First]-2.5,iif([名次之Count]=7,[得分之First]-3,[得分之First]-3.5))))))) AS 实际得分
FROM 表1 INNER JOIN 查询1 ON 表1.[实际名次]=查询1.[实际名次];

[ 本帖最后由 sgrshh29 于 2007-8-9 10:32 编辑 ]
作者: lxjii    时间: 2007-8-10 01:16
太谢谢啦,我要马上试试看,谢谢!
作者: sgrshh29    时间: 2007-8-10 04:51
原帖由 lxjii 于 2007-8-10 01:16 发表
太谢谢啦,我要马上试试看,谢谢!

这样子速度更快一些.
表的结构:
排名次序排名得分姓名实际名次
18A1
27B1
36C1
45D4
54E5
63F6
72G7
81H7

查询1(过渡查询):
SELECT 表1.实际名次, Sum(表1.排名得分) AS 得分之Sum, Count(表1.实际名次) AS 名次之Count
FROM 表1
GROUP BY 表1.实际名次;
查询2(也就是结果):
SELECT 表1.姓名, 表1.实际名次, [得分之Sum]/[名次之Count] AS 实际得分
FROM 查询1 INNER JOIN 表1 ON 查询1.实际名次 = 表1.实际名次;
查询结果:
姓名实际名次实际得分
A17
B17
C17
D45
E54
F63
G71.5
H71.5


[ 本帖最后由 sgrshh29 于 2007-8-10 04:54 编辑 ]
作者: hi-wzj    时间: 2007-8-10 10:47
如果来个前7名再加2个并列第8名怎么处理?
作者: sgrshh29    时间: 2007-8-10 11:00
原帖由 hi-wzj 于 2007-8-10 10:47 发表
如果来个前7名再加2个并列第8名怎么处理?

呵呵,那要问lxjii这个评委了.
作者: lxjii    时间: 2007-8-10 20:59
原帖由 hi-wzj 于 2007-8-10 10:47 发表
如果来个前7名再加2个并列第8名怎么处理?

已经考虑了很多情况,没想到还有这样的极限情况存在
管他的,先搞搞先吧

谢谢两位的热情帮助

呃对了,如果在窗体的话能否做出这样的效果?
作者: hi-wzj    时间: 2007-8-13 14:25
编程是要先考虑到各种意外情况下如何处理,保证逻辑不出现差错,然后才说如何设计数据库,最后才考虑如何运算。但初学的人一般却喜欢反过来操作,因此经常会在编得差不多时,发现一个没考虑到的情况,不得不全部推倒重来。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3