質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

22832閲覧

[Access]SQL構文での指定数レコードの取得について

退会済みユーザー

退会済みユーザー

総合スコア0

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2015/02/26 03:15

SQL構文について以下の質問です

<DB> Access 2013

<前提条件>
成績表のようなテーブルがあり、
昇順にて上位10位の10件のレコードを取得したい。

「TOP」でできますが、レコードの中に同順位があると
指定の10件を超えてしまいます。
Accessには、「limit」、「offset」がないので
どのようなSQLを書けばいいか思い浮かびません。

<検討した代替案>
DBをSQL Serverに変更して、「ROW_NUMBER」を利用する方法
もありますが、関連するコードを書き換える工数が発生するため、
できれば避けたいです。

Access 設定の変更はできないので、
Access SQL 構文のみで処理を希望しています。

お手数ですが、ご教示お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

他の項目と合わせてユニークにできるのであれば、複数項目を組み合わせた値でORDER BYをするとかいう手もあります。
以下はサンプルです。テーブル名が「DATA」で「SCORE」が得点、「ID」は成績表であれば学籍番号みたいなものをイメージしています。

SELECT TOP 10 ID
FROM DATA
ORDER BY RIGHT("000000" & SCORE,6) & RIGHT("000000" & ID,6) DESC;

上記のサンプルはSCORE降順・ID降順で上位10件です。
SCORE降順・ID昇順にしたいのであれば

ORDER BY RIGHT("000000" & SCORE,6) & RIGHT("000000" & ID,6) DESC;

ORDER BY RIGHT("000000" & SCORE,6) & RIGHT("000000" & 999999 - ID,6) DESC;

にするといけたりします。
フォーマットを決めて複数の項目を組み合わせて文字列として比較するという発想です。

力技でスマートではないと思いますが。

投稿2015/02/26 16:35

編集2015/02/26 16:47
HachiyaKouya

総合スコア85

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/02/27 04:25

HachiyaKouyaさん ご回答ありがとうございます。疑似的なユニークキーで解決しそうです。 分析のために、調査サンプル数を固定にする必要がありましたため大変助かりました。 深夜にも関わらず、動作確認していただき感謝します。 shinosanさん 応用範囲が広がる情報ありがとうございます。 別の業務要件で利用させていただきます。
guest

0

このTOPとサブクエリの組み合わせで何とかなるでしょうか?

投稿2015/02/26 03:46

shinosan

総合スコア209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/02/26 07:05

shinosanさん ご回答ありがとうございます。 動作環境がないためテストすることができないのですが、 このサブクエリの場合、 「SELECT MAX(ID) FROM (SELECT TOP 20 FROM テーブル名 ORDER BY ID)」 上記がフィルタ代わりになっていると思います。 参考元のように、「ORDER BY」の対象がユニークであればいいのですが、 実際のテーブルには同じ値が入っていることもあるため、「TOP」を利用すると、 同じ結果になるような気がします。 念のため環境が整いましたらテストさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問