• ベストアンサー

任意の件数の取得

検索条件にマッチしたレコードのセットのうち、任意の件数、例えば1から100件、101から200件とか、取得する方法というのはありますか? DBはDB2です。 オラクルではあった気がするのですが、DB2は?と思っています。 もっと言うと、実装はHibernateを使用してアクセスしているので、Hibernateでそのような取得方法があるのならそれも教えていただきたいと思っています。 よろしくお願いします。 (ソートして連番ふるviewでも作ればいいのかな…などとも思っています。どうなんでしょ?)

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

  • ベストアンサー
回答No.2

DB2では、MySQLやPostgreSQLでサポートされているLIMITやOFFSETを実装していません。 しかし、ORACLEと同様に代替機能があります。 ●1件目からn件目のみの取り出す  FETCH FITRST n ROWS ONLY節をSELECT文の最後に付ける。 例)先頭から3行のみ取り出し SELECT * FROM t1 ORDER BY c1 FETCH FIRST 3 ROWS ONLY ●m行目からn行目を取り出す OLAP関数のROWNUMBER()とoverを使用して結果セットに番号を振り、その番号を利用して取り出す。 例)11番目から20行を取り出す SELECT t.c1,t.c2 FROM (SELECT c1,c2,ROWNUMBER() OVER (ORDER BY c2) AS rownum FROM t1) AS t WHERE rownum BETWEEN 11 AND 20 ORDER BY rownum

arakororin
質問者

お礼

ぜんぜん知らない機能でした。 こんな書き方があるのですね。 大変参考になりました。ありがとうございました。

その他の回答 (1)

noname#182251
noname#182251
回答No.1

DB2は判りませんがSQL文としては下記のようなものでいかがでしょうか?フリガナが ア~ソ で 11番~20番を選択しています。 SELECT (SELECT Count(*)+1 FROM 住所録 WHERE 住所録.氏名フリガナ<S.氏名フリガナ and (住所録.氏名フリガナ)>="ア" And (住所録.氏名フリガナ)<"ン") AS 式1, S.氏名, S.氏名フリガナ FROM 住所録 AS S WHERE ((((SELECT Count(*)+1 FROM 住所録 WHERE 住所録.氏名フリガナ<S.氏名フリガナ and (住所録.氏名フリガナ)>="ア" And (住所録.氏名フリガナ)<"タ"))>10 And ((SELECT Count(*)+1 FROM 住所録 WHERE 住所録.氏名フリガナ<S.氏名フリガナ and (住所録.氏名フリガナ)>="ア" And (住所録.氏名フリガナ)<"ン"))<21) AND ((S.氏名フリガナ)>="ア" And (S.氏名フリガナ)<"タ"));

arakororin
質問者

お礼

なんかすごいSQL文ですね…。 とにかくこんな感じでもしなければ実現できないということですよね。分かりました。 ありがとうございました。

関連するQ&A

  • VB.NETでソートされたデータセットの取得

    データ数が数十万レコードのテーブルがあります。 ここから上位1000件のレコードをデータセットに取得したいと思います。 しかし、この時点でソートがかけられないのでビューを作成時にソート をすることになると思います。 レコード数が少ない場合は、これでもいいのですが、多くなると、データ セットに取得する時点でかなり時間がかかります。 この場合、どういった方法が最適でしょうか? リーダーを使うのが普通でしょうか?

  • ファイルメーカーでソート後のレコード番号を取得する

    1000件データがあって、ソートして20件にしたとします。その20件に連番を1から振って、その数字をエクスポートしたいです。ソート後のレコード番号を取得できる関数があるならそれでもかまいませんし、エクスポートで直接連番が書き出せるならその方がもっと助かります。 方法をご存知でしたら、ぜひご回答よろしくお願いいたします。

  • 任意値を取得について

    Oracleで、先頭からではなく、任意の範囲だけレコードを取り出したいが、 limitとoffsetのような方法がありますか。

  • SQLとDAOで取得するレコード件数が違う?

    Access2007でSQLで実行した結果と、レコードセットで取得した件数が一致せずに困っています。 いろいろ調べてはみたのですが、なぜかわかりません。 よろしくお願いします。 ○TableA 型 Code1 数値型(主キー) Text テキスト型 Code2 数値型 ○TableA データ Code1 Text Code2 111 AAA 10 112 BBB 15 113 CCC 20 114 DDD 20 ○VBAコード Dim strSQL As String Dim db As DAO.Database Dim rstFind As DAO.Recordset strSQL = "SELECT * FROM TableA Where Code2 = 20" Set db = CurrentDb() Set rstFind = db.OpenRecordset(strSQL, dbOpenSnapshot) MsgBox rstFind.RecordCount この状態でSQLビューから実行すると2件が抽出され、上記VBAを実行するとMsgBoxには「1」と表示されます。

  • Ajaxでの、任意の件数でページ送りをするには?

    <ul>で定義したリスト項目を、任意の件数で区切ってページ送りを実装しようと思っています。 <li>が50件くらいあって、それをn件ずつ実体を表示し、 1ページ目、2ページ目……とリンクを作ってページを切り替える。 表示件数nはユーザーには選ばせず、制作側がきめた件数で固定。 このような動作を実装するのに参考になるサイト、サンプルなど ありましたら、ご教示いただければと思います。 よろしくお願いします。

  • DCountでテーブルのレコード件数を取得するには

    アクセスのテーブル1に何件レコードがあるかをvbaのDCountで取得したいのですが Sub a() MsgBox DCount("テーブル1") End Sub すると、引数は省略できません。(Error 449)になります。 フィールドは件数あり、レコードが入ってたり入ってなかったりするし、主キーはありません。 アクションクエリの削除クエリですべてのレコードを削除したりするので レコード件数が0件なのか、レコードがはいってるかをDCountで取得できればなー と思うのですが、どうすればいいでしょうか?

  • oo4o。executeSQLにてupdate実行後、実行件数取得は?

    今まであまり使ったことの無かったAccess97のVBAを使用しています。単純な質問なんですが、教えてください。 oo4oにてオラクルDBに接続し、executeSQLメソッドにより単純なupdate処理を実行しました。 -----(細かいところは省略) sql= "update TABLE_A set CODE='AAA' where NAME='HOGE'" OraDB.ExecuteSQL sql ----- このExecuteSQLメソッドの、実行結果が0件なのか、1件なのかを知りたいのですが、方法はありますでしょうか?つまり、直前のSQLの実行結果を取得するメソッドはありますか?という質問です。Javaとかなら、戻り値として実行結果の件数が帰ってきますよね。この場合はそれをどうやって取ればいいのでしょうか? where NAME='HOGE'に当てはまるレコードが無くても、0件の処理が成功として、エラーは出ないんですよねぇ・・・ もし不足の情報がありましたら、補足いたします。 よろしくお願いします。

  • テーブルのレコード件数取得について

    はじめまして。 postgresの「テーブルのレコード件数取得」について教えてください。 何も考えずに select count(*) from tblA; というSQLの記述をしていたのですが、レコード件数が30万件を超えた あたりから、結果が戻るまでに4~5秒もかかるようになりました。 もっと効率の良い(=短い時間)検索方法はあるのでしょうか? ちなみに postgres+C+PC-Soralis の組みあわせです。 マシンはPen4-2Ghz メモリーは512MBです。

  • oracle10g update件数の取得方法

    oracle10g update件数の取得方法 pl sql(stored procedure)で複数のupdate文を適用します。update後にupdateしたレコード件数をログテーブルにinsertしたいのですが、updateしたレコード件数を取得する方法はありますか?

  • JSP+Servletでのページングの常識

    JSP+Servletでのページングの実装方法について伺いたいと思い、 質問いたしました。 現在JSP+ServletでWebページを製作しておりますが、 ページングを行うデータの取得方法で悩んでおります。 データをDBから取得する際は、下記1と2のどちらが標準的な実装方法なのでしょうか??? 条件としては、レコード件数2000件のテーブルからデータを取得し、1ページ10件ずつ表示します。 また、APサーバとDBサーバの通信がボトルネックになることはない場合でお願いします 1.全件を最初に取得しておいて、ページ切り替えの際は、DB接続なしで表示する 2.ページに表示する件数分のみDBから取得し、ページ切り替えの際は、毎回必要な件数分取得する 1の方法ですと、常に全件をキャッシュしていることになり、パフォーマンスが心配です。 2の方法ですと、ページ制御が煩雑になりそうな気がします。

    • ベストアンサー
    • Java