Sql 具有两个变量的Ms访问秩
我正在尝试创建一个基于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 2Sql 具有两个变量的Ms访问秩,sql,ms-access,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
到目前为止,我已经陷入了一个相关查询中,因为我不确定如何包含第二个条件。任何帮助都将不胜感激。您可以通过以下方式使用加入和分组:
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;
我没有在access中测试过这些语法,但据我记忆所及,我没有使用任何不受支持的语法
例如,使用SQLServer作为SQLFIDLE上最接近的可比较DBMS。此外,我在这些示例中保留了您的原始排名以供比较您可以通过以下方式使用连接和分组:
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;
我没有在access中测试过这些语法,但据我记忆所及,我没有使用任何不受支持的语法
例如,使用SQLServer作为SQLFIDLE上最接近的可比较DBMS。此外,我在这些示例中保留了您原来的排名,以供比较太好了!我今天得出的结果是相似的,但当两个值相等时,它给出了一个更大的位置,例如称之为1,2,4,4,5,而不是1,2,3,3,5个选择位置。[性别],位置。[类别],位置。[奇普诺],位置。[PunchID],位置。[PunchTime],选择count*from位置作为位置2 where位置。[PunchTime]>=位置2。[PunchTime]和位置。[PunchID]=Places2.[PunchID]和Places.[Class]=Places2.[Class]作为PlacesGreat的排名!我今天得出的结果是相似的,但当两个值相等时,它给出了一个更大的位置,例如称之为1,2,4,4,5,而不是1,2,3,3,5个选择位置。[性别],位置。[类别],位置。[奇普诺],位置。[PunchID],位置。[PunchTime],选择count*from位置作为位置2 where位置。[PunchTime]>=位置2。[PunchTime]和位置。[PunchID]=Places2.[PunchID]和Places.[Class]=Places2.[Class]作为Places的排名