0

我有一张高尔夫成绩表,如下所示:

name           r1    r2    r3    r4    event
Tiger Woods    71    68    67    72    Buick Invitational 2006
Nathan Green   67    70    69    72    Buick Invitational 2006
J.M. Olazabal  74    64    71    69    Buick Invitational 2006
Arjun Atwal    70    67    71    71    Buick Invitational 2006

我希望能够以百分比计算每个球员在给定的一天/回合中得分比对手高的频率。

例如,在上面显示的四名球员中,Tiger 在第 1 轮的得分低于仅 JM Olazabal。1/3 = 33%。

在第三轮他得分最低,所以 100%。

Arjun Atwal 在 r3 中的得分并列最高,无人击败,因此 =0%。

等等...

基本上我想检查每一行与事件字段相同的每一行。非常感谢任何帮助!

编辑:为了清楚起见,我所追求的输出如下所示:

Tiger Woods    33%    33%    100%   0%     Buick Invitational 2006
Nathan Green   100%   0%     67%    0%     Buick Invitational 2006
J.M. Olazabal  0%     100%   0%     100%   Buick Invitational 2006
Arjun Atwal    67%    67%    0%     67%    Buick Invitational 2006

再次感谢。

4

2 回答 2

0

如果您的数据存储在名为 Table1 的 MS Access 表中,则下面的 SQL 将完成此操作。您可以通过使用 count(*)-1 而不是 3 来概括这一点,以消除您有 4 个竞争对手的假设。

将以下内容粘贴到新查询的 SQL 视图中。

SELECT T.name, Sum(IIf(T2.r1>T.r1,1,0)*100/3), Sum(IIf(T2.r2>T.r2,1,0)*100/3), Sum(IIf(T2.r3>T.r3,1,0)*100/3), Sum(IIf(T2.r4>T.r4,1,0)*100/3)
FROM Table1 AS T, Table1 AS T2
GROUP BY T.name;
于 2012-08-16T15:15:54.387 回答
0

因为我认为这可能很有趣,所以这里的 SQL 将为您提供您描述的确切结果:

SELECT t.name, 
Format((Select Count(*) from [Table] where [Table].r1 > T.r1 And [Table].event = t.event)/3,"0%") as r1,
Format((Select Count(*) from [Table] where [Table].r2 > T.r2 And [Table].event = t.event)/3,"0%") as r2, 
Format((Select Count(*) from [Table] where [Table].r3 > T.r3 And [Table].event = t.event)/3, "0%") as r3, 
Format((Select Count(*) from [Table] where [Table].r4 > T.r4 And [Table].event = t.event)/3, "0%") as r4,
event
FROM [Table] as T;
于 2012-08-16T15:01:47.733 回答