• ベストアンサー

ACCESS2000 で 上位2件を抽出する方法

クエリ上は下記の通りになっております。よろしくお願いします。 アーティスト 曲名 回数 AAA  ???? ????? AAA ???? ????? AAA ???? ????? BBB  ???? ????? BBB  ???? ????? BBB  ???? ????? BBB  ???? ????? アーティストの数は同一名で20タイトルあれば10タイトルとバラバラです。 各アーティストの持ち歌の中から上位2曲(アーティスト 曲名 回数順で表記)抽出したいのですが、お解りになる方、お教えください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.1

tab1: アーティスト_曲名_回数 A____________A1______1 A____________A2______3 A____________A3______2 B____________B1______3 B____________B2______2 B____________B3______1 [イミディエイト] ? DBSelect("SELECT * FROM [クエリ1] WHERE 順位<=2 ORDER BY [アーティスト], 順位",,vbcrlf) A;A2;3;1; A;A3;2;2; B;B1;3;1; B;B2;2;2; これで、アーティスト毎の上位2曲を抽出しています。 クエリ1: アーティスト_曲名_回数_順位 A____________A1______1____3 A____________A2______3____1 A____________A3______2____2 B____________B1______3____1 B____________B2______2____2 B____________B3______1____3 テーブル[tab1]には存在しなかった[順位]列がクエリには追加されています。 ですから、当然に’順位<=2’という条件で抽出可能。 順位: DBCount("*","tab1","[アーティスト]='" & [アーティスト] & "' AND 回数>=" & [回数]) 私は、プログラマでもなんでもないただのおっさんです。 ですから複雑なSQL文を考えるのは苦手です。 ですから、次のDBCount関数で安直にカレント行より以上の[回数]行をカウントして[順位]列を生成。 Access のクエリには、このように自作関数を組み込めるので許される芸当です。 ※SQL文の王道に則った回答は他者のを参考になさってください。 Public Function DBCount(ByVal strField As String, _             ByVal strTable As String, _             Optional ByVal strWhere As String = "", _             Optional ByVal ReturnValue = 0) As Variant On Error GoTo Err_DBCount    Dim N    Dim strQuerySQL As String    Dim rst     As ADODB.Recordset    Set rst = New ADODB.Recordset    strQuerySQL = "SELECT COUNT(" & strField & ") FROM " & strTable    If Len(strWhere) > 0 Then      strQuerySQL = strQuerySQL & " WHERE " & strWhere    End If    With rst      .Open strQuerySQL, _         CurrentProject.Connection, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then        .MoveFirst        N = .Fields(0)      End If    End With Exit_DBCount: On Error Resume Next    rst.Close    Set rst = Nothing    DBCount = IIf(N <> 0, N, ReturnValue)    Exit Function Err_DBCount:    MsgBox "SELECT 文の実行時にエラーが発生しました。(DBCount)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"    Resume Exit_DBCount End Function

2542
質問者

お礼

ご返信が遅くなりまして申し訳ございません。 ご丁寧にありがとうございました。 問題なく、解決いたしました。

関連するQ&A

専門家に質問してみよう