VB6.0 を使用して、フィールド「英語」を含む学校のデータベースがあり、SQL を使用してレコードセットを作成し、英語を降順に並べました。私の問題は、これらの学生をランク付けして、引き分けの後、次の生徒が次のように引き分けの数に応じてランク付けされるようにすることです。
英語: 45, 48, 67, 67, 67, 80, 80, 91.
英語ランク 91 - 1 80 - 2 80 - 2, 67 - 4, 67 - 4, 67 - 4, 48 - 7, 45 - 8,
VB6.0 を使用して、フィールド「英語」を含む学校のデータベースがあり、SQL を使用してレコードセットを作成し、英語を降順に並べました。私の問題は、これらの学生をランク付けして、引き分けの後、次の生徒が次のように引き分けの数に応じてランク付けされるようにすることです。
英語: 45, 48, 67, 67, 67, 80, 80, 91.
英語ランク 91 - 1 80 - 2 80 - 2, 67 - 4, 67 - 4, 67 - 4, 48 - 7, 45 - 8,
あなたの質問はあまり明確ではありませんが、このようなものが欲しいと思いますか?
select Eng, rank() over (order by Eng desc) EnglishRank from somewhere
次のコードの行に沿って何かを意味していたと思います。手順からデータを取得する方法を 1 つだけ使用しています。あなたはおそらく何か違うことをするでしょう。
Option Explicit
Private Type RankedScores
Rank As Long
Score As Long
End Type
Private Sub RankValues(ByRef the_rs As ADODB.Recordset, ByRef out_auRankedScores() As RankedScores)
Dim nIndex As Long
Dim nRank As Long
Dim nScore As Long
Dim nLastScore As Long
nRank = 0
nIndex = 0
' Resize the output buffer to its maximum size (won't work on some types of recordsets).
ReDim out_auRankedScores(1 To the_rs.RecordCount)
Do Until the_rs.EOF
nIndex = nIndex + 1
' Pull score out of the recordset. If it is not the same as the last score, then increment the rank.
nScore = CLng(the_rs.Fields.Item("English"))
If nScore <> nLastScore Then
nRank = nIndex
End If
' Write into output buffer.
With out_auRankedScores(nIndex)
.Rank = nRank
.Score = nScore
End With
' Reset last score.
nLastScore = nScore
' Next row.
the_rs.MoveNext
Loop
End Sub