1

2 つの列 (クラスと ID) に基づいてランキングを作成しようとしています。これにより、最低タイムに基づいて、各コースの独自のクラスで (Chipno を使用して) 競技者がランク付けされます。左の 4 列は入力であり、目的の出力は右側の列にあります。

クラス チップノ コースタイム ランク
F23 2025827 0:08:20 1
F23 2025827 B 0:17:53 1
F23 2025928 0:10:54 2
F23 2025906 B 0:20:49 2
F23 2025810 B 0:33:36 3
F23 2025923 0:11:50 3
M23 1398276 B 0:23:21 3
M23 2025805 あ 0:09:09 1
M23 1398204 B 0:17:27 2
M23 2025964 B 0:16:48 1
M23 1398249 あ 0:10:02 3
M23 1398235 あ 0:09:56 2

これまでのところ、2 番目の条件を含める方法がわからなかったため、相関クエリに悩まされてきました。どんな助けでも大歓迎です。

4

1 に答える 1

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;

アクセスでこれらをテストしたことはありませんが、覚えている限り、サポートされていない構文は使用していません。

SQL Fiddle での作業例

例では、SQL-Fiddle で最も近い同等の DBMS として SQL Server を使用しています。さらに、比較のためにこれらの例に元のランクを残しました

于 2013-10-01T11:04:48.720 に答える