我正在尝试根据Microsoft Access中某个特定类别的人数为他们评分。
一个人可能对他们有7种可能的类别,我想给每个人分配1到7的分数,其中1分被指定为最高得分类别,而7分则是最低分数。他们可能没有针对每个类别的答案,在这种情况下,可以忽略该类别。
目标是获得如下图所示的输出结果:
我尝试了几种不同的方法,包括分区和联接,但是都没有用。老实说,我认为我所尝试的查询远远超出了预期。我试图从头开始用SQL编写代码,并使用查询生成器。
我们非常感谢您的帮助!
答案 0 :(得分:0)
由于您的电子邮件可能具有重复的计数,因此您需要两个子查询:
SELECT
Score.email,
Score.category,
Score.[Count],
(Select Count(*) From Score As T Where
T.email = Score.email And
T.[Count] >= Score.[Count])-
(Select Count(*) From Score As S Where
S.email = Score.email And
S.[Count] = Score.[Count] And
S.category > Score.category) AS Rank
FROM
Score
ORDER BY
Score.email,
Score.[Count] DESC,
Score.category;
答案 1 :(得分:0)
对于相同 Count
值为等于 email
的类别,以下内容将记录按字母顺序降序Category
名称(因为这是您的示例中显示的名称):
select t.email, t.category, t.count,
(
select count(*) from YourTable u
where t.email = u.email and
((t.count = u.count and t.category <= u.category) or t.count < u.count)
) as rank
from YourTable t
order by t.email, t.count desc, t.category desc
将YourTable
的两个引用都更改为表的名称。