• ベストアンサー

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

  • Access2007抽出のことで

    Access2007のクエリ、デザインビューのことです。 データが例えば aaa bbb ccc ddd とあるとして、このうちaaaとcccの2つを抽出しようと 思って「"aaa"and"ccc"」とか書いても データシートビューでは空欄になってしまいます。 条件の書き方がおかしいのでしょうか?

  • ACCESSの抽出方法について

    クエリについて質問ですが、 今テーブルAとテーブルBがありまして、 <テーブルA> AAA あか BBB あお CCC きいろ <テーブルB> 1 あお 2 きいろ 上記のようなデータで、色の部分をキーにして テーブルAだけにあるデータ「AAA あか」を抽出する方法は どのようにしたらできるのでしょうか。

  • Accessによる集計方法について

    Accessによる集計方法について kamuycikapです。 下記のデータベースを利用して集計作業を行うときの、クエリ作成方法についてご教示願います。 <やりたいこと> キーとなるコード別に数量を合計計算したい。 <データベース> |キー|数量| AAA 1 AAA 3 AAA 4 CCC 5 BBB 2 BBB 9 <求める結果> |キー|合計数量| AAA 8 BBB 11 CCC 5 上記条件でのクエリ作成について、識者様からのアドバイスをお願い致します。 マクロ等のサンプルはGoogle検索でひっかかりましたが、出来る限りクエリでカバーしたいと思いますし、クエリを使えば実現できるのではないかと思っています。 今も、Access起動してクエリを試行錯誤しております。

  • SQL抽出順番

    SQLの質問なんですが 以下のSQLがあるとします。 select カラムA、カラムC from test_table where in ('AAA','BBB','CCC'); ※条件はカラムAの値を使用しています。 結果が AAA 111 BBB 222 CCC 333 と出るとします。 下のように条件を変えたとき where in ('BBB','CCC','AAA'); BBB 222 CCC 333 AAA 111 と抽出と変わるようにしたいのですが、 (in句の左から順番にレコードが抽出したいです) 何か良い方法はありますでしょうか? rowid順で出力されてしまうのでしょうか? 以上です。 よろしくお願いします。

  • GROUP BY句の使用方法について(初歩的)

    GROUP BY句の使用方法について質問させて下さい。 ■使用するテーブル  ID   日付 ----------------------  AAA   2007-04-01  AAA   2007-04-01  AAA   2007-04-02  AAA   2007-04-03  BBB   2007-04-01  BBB   2007-04-03  CCC   2007-04-02  CCC   2007-04-02  CCC   2007-04-02 ■抽出したいこと  ID毎のカウントを取りたいのですが、その際に同じ日付は1回のカウントとして抽出したいのです。  即ち、下記の結果を得るのが目的ですが、どのようなクエリとすればいいでしょうか?  ID  cnout(*) ----------------------  AAA   3  BBB   2  CCC   1 初歩的な質問なのですが、宜しくお願い致します。 (※環境はSQL-Server2000です)

  • accessである「キーワードの種類」をクエリで抽出をしたい

    OFFICE2003 を使っています。  取引リスト       ─────────────  AAA商店    BBB商会   AAA商店       CCC商事  BBB商会   クエリで、上記のテーブルを  AAA商会   BBB商会   CCC商事  計 3ユーザー と抽出したいのですが、どうすればよいのかわからず困っています。 (取引の回数でなく、取引のあったユーザーの数を求めたいです。) 10000件のユーザーデータがあり、年間7000件の利用があります。 年間複数回、利用するユーザーもいるので、 10000件のユーザー中、年間何ユーザーが利用しているのか調べています。 抽出条件で、どのような式を書けばよいのでしょうか? VisualBasicとかは、まだ勉強不足でわかりません。 よろしくお願いします。

  • ACCESS クエリ 抽出条件が多い場合

    ACCESSの超初心者です。 選択クエリで、80件ほどの抽出条件を部分一致で 設定しています。(Likeを使用) 例えばこんな感じです。  フィールド   aaa1   bbb52   aaa33   aac8   bba35   bba115    抽出条件 Like "aaa*" Or Like "bba*" →抽出結果 aaa1,aaa33,bba35,bba115 今後も条件が増えていく予定なので、別の 良い方法がないかと思っています。 (できるかどうかわかりませんが、 別にテーブルを作り、その一覧内の文字が 含まれるレコードのみを抽出) 皆さんのお知恵をお貸しいただけないでしょうか。 宜しくお願いします。

  • アクセス 抽出条件

    いつもお世話になります。 次の条件で抽出したい時、クエリの抽出条件の書き方を教えてもらえますか。 支店CD 顧客CD 売上金額 昇順         降順 1     11     5,000 1     12     4,000 1     13     3,000 1     14     2,000 2     15     6,000 2     16     5,000 2     17     4,000 3     18     7,000 3     19     6,000 3     20     5,000 支店ごとの上位2レコードを抽出したいのです。下記のように 支店CD 顧客CD 売上金額 1     11     5,000 1     12     4,000 2     15     6,000 2     16     5,000 3     18     7,000 3     19     6,000 アクセスは2003です。よろしくお願いします。

  • access クエリからレポートへ

    お世話になります。  月度 コード 取引名 金額   5月  001   AAA   500   6月  001   AAA   600   7月  001   AAA   700   5月  002   BBB  1000   6月  002   BBB  2000   7月  002   BBB  3000 というクエリがあります。 月度は抽出条件で、Between [開始] And [終了] で指定します。 これを、  コード 取引名  5月   6月   7月  合計金額   001   AAA   500   600   700   1800   002   BBB  1000  2000  3000   6000 となるようにレポートで表示したいのですが、できるのでしょうか? よろしくお願いします。

  • アクセス2003 各売上日の直近仕入額を知るには?

    いつもお世話になっています。 クエリを使って次のようなことがしたいのですが可能でしょうか? 下記のような2つのテーブルがあるとします。 <仕入記録> [仕入ID]  [仕入年月日]   [商品名]   [数量]   [単価]   1     2007/04/01     AAA    1    1,000   2     2007/04/03     BBB    1    2,000   3     2007/05/06     AAA    1    1,200   4     2007/05/15     CCC    1     800   5     2007/06/08     BBB    1    2,200   6     2007/06/20     CCC    1     900 <売上記録> [売上ID]   [売上年月日]   [商品名]   [数量]   1      2007/04/25    AAA      1   2      2007/05/08    AAA      1   3      2007/05/08    BBB      1   4      2007/06/10    AAA      1   5      2007/06/10    BBB      1   6      2007/06/10    CCC      1 この時2つのテーブルを使って販売した商品の原価(仕入単価)を求めるクエリを作りたいのですがどのようにしたらよいのでしょうか? 仕入単価は、各商品の売上年月日以前かつ最も売上年月日に近い仕入れ時の単価にしたいと考えています。 上記の場合、希望するクエリの結果は下記のような感じです。 [売上ID]   [売上年月日]   [商品名]   [仕入単価]   1      2007/04/25    AAA      1,000   2      2007/05/08    AAA      1,200   3      2007/05/08    BBB      2,000   4      2007/06/10    AAA      1,200   5      2007/06/10    BBB      2,200   6      2007/06/10    CCC       800 ご指導よろしくお願いします。

このQ&Aのポイント
  • 富士通サポートのボタンがうまく起動しない場合、他の方法でパソコンのデータ消去を行うことができます。
  • 富士通FMVA553ATの場合、データ消去方法を教えてください。
  • パソコンを処分する際には、データの消去が非常に重要です。富士通サポートのボタンが使えない場合でも、他の方法でデータ消去を行うことができます。
回答を見る

専門家に質問してみよう