我正在尝试根据两列(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
到目前为止,我已经纠缠在一个相关的查询中,因为我不知道如何包含第二个条件。任何帮助将不胜感激。
答案 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。另外,我已将这些示例中的原始等级留下来进行比较