我正在寻找如何从分数列表中选出一名获胜者,第二名和第三名(第1行中的玩家名称和第2行中的分数)。困难是如何在有联系时考虑到。我想遵循的规则如下:
Sofar我有以下内容:
获胜者:
=INDEX($A$1:$G$1;MATCH(LARGE($A2:$G2;1);$A2:$G2;0))
第二名:
=IF(COUNTIF(A2:G2;">"&0)=1;"-";INDEX($A$1:$G$1;MATCH(LARGE($A2:$G2;2);$A2:$G2;0)))
示例:播放器1(250),播放器2(300),播放器3(300)=> 获胜者玩家2,第二名玩家3
非常感谢,
答案 0 :(得分:1)
以下是在两名球员得分相同的情况下找到第二名的公式 -
=IF(COUNTIF(A2:H2,">"&0)=1,"-",IF(LARGE($A2:$G2,1)=LARGE($A2:$G2,2),INDEX($A$1:$G$1,MATCH(LARGE($A2:$G2,2),OFFSET(A2,0,MATCH(LARGE($A2:$G2,1),$A2:$G2,0),1,6),0)+MATCH(LARGE($A2:$G2,1),$A2:$G2,0)),INDEX($A$1:$G$1,MATCH(LARGE($A2:$G2,2),A2:G2,0))))
基本上,我已根据您给定的公式添加了一个公式 -
1)如果两名球员得分相同 -
LARGE($A2:$G2,1)=LARGE($A2:$G2,2)
更改匹配公式查找数组的范围。使用offset -
指定此动态范围INDEX($A$1:$G$1;MATCH(LARGE($A2:$G2;2);OFFSET(A2;0;MATCH(LARGE($A2:$G2;1);$A2:$G2;0);1;6);0)+MATCH(LARGE($A2:$G2;1);$A2:$G2;0))
2)如果获胜者和第二名球员的得分不同,则使用原始公式。
INDEX($A$1:$G$1;MATCH(LARGE($A2:$G2;2);A2:G2;0))
这种方法的局限在于不可能使这个公式成为通用的。
例如,为了找到第三名,有4种可能的情况 -
答案 1 :(得分:1)
我使用第二和第三的数组公式。因此,请使用Ctrl-Shft-Enter
确认公式被修改
SELECT A,
B,
dbo.storedproc( function1(A,B),
function1(A,B),
function2(B,C),
D
) AS newcol,
D
FROM Table;
我通过将第一名的分数替换为0并在此新列表中找到最高人物来生成新数组。
Second place = =INDEX(A$1:G$5,1,MATCH(LARGE(IF(A$1:G$1<>$B$5,A$2:G$2,0),1),$A$2:$G$2,0))
我在这里取消了前2名。
当其他条件为零时,你可以用另一个条件包围这个“ - ”。