Access Rank有两个变量

时间:2013-10-01 10:37:04

标签: sql ms-access

我正在尝试根据两列(Class和ID)创建排名。这将根据最短时间对每个球场的竞争对手(使用Chipno)进行排名。左侧4列是输入,所需输出位于右侧列。

Class Chipno Course Time Rank
F23 2025827 A   0:08:20 1
F23 2025827 B   0:17:53 1
F23 2025928 A   0:10:54 2
F23 2025906 B   0:20:49 2
F23 2025810 B   0:33:36 3
F23 2025923 A   0:11:50 3
M23 1398276 B   0:23:21 3
M23 2025805 A   0:09:09 1
M23 1398204 B   0:17:27 2
M23 2025964 B   0:16:48 1
M23 1398249 A   0:10:02 3
M23 1398235 A   0:09:56 2

到目前为止,我已经纠缠在一个相关的查询中,因为我不知道如何包含第二个条件。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用JOIN和GROUP BY执行此操作:

SELECT  T.Class, 
        T.ChipNo, 
        T.Course, 
        T.Time, 
        COUNT(T2.ChipNo) + 1 AS [Rank]
FROM    T
        LEFT JOIN T T2
            ON T2.Class = T.Class
            AND T2.Course = T.Course
            AND T2.Time < T.Time
GROUP BY T.Class, T.ChipNo, T.Course, T.Time
ORDER BY T.CLass, T.Course, T.Time;

或使用相关子查询:

SELECT  T.Class, 
        T.ChipNo, 
        T.Course, 
        T.Time, 
        (   SELECT  COUNT(T2.ChipNo) + 1 
            FROM    T T2
            WHERE   T2.Class = T.Class
            AND     T2.Course = T.Course
            AND     T2.Time < T.Time
        ) AS [Rank]
FROM    T
ORDER BY T.CLass, T.Course, T.Time;

我没有在访问中测试这些,但据我记得,我没有使用任何不受支持的语法。

Working Examples on SQL Fiddle

示例使用SQL Server作为SQL-Fiddle上最接近的可比较DBMS。另外,我已将这些示例中的原始等级留下来进行比较