• ベストアンサー

2行目を表示できますか?

上位n行目は下記のようにして取得できますよね。 SELECT TOP n 項目A FROM テーブルA 2行目だけを取得する、あるいは 10行目から20行目だけを取得することはできますか?

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

  • ベストアンサー
  • audittrq
  • ベストアンサー率37% (13/35)
回答No.1

10~20件目を表示させたい場合は ----------------------------------- select top 10 [項目A] from [テーブル] where [キー項目] not in (select top 9 [キー項目] from [テーブル] order by [項目B]) order by [項目B] ----------------------------------- このように書けばOKです。 not in (select top 9 で、1~9件目のデータを飛ばしています。 2件目のみの表示だけでいいならば、ここの 9 を 1に変えると 動くと思いますよ。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

基本的に、#1で書かれているSQLで異論はないのですが・・ 100001件目~100010件のような、巨大なデータの後半戦だと、 not inが如何にも苦しいように感じます。 select * from (select top 10 * from (select top 100010 * from X order by x) order by x desc) order by x の方がRDBに、ちょっとだけ優しいような気がします。 (top 100010の時点で苦しいのですけどね)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 各伝票に対して明細を1行目だけ表示したい

    たびたびお世話になります。 仮に以下のようなテーブルを考えるとします。 ○テーブルA (伝票) 伝票番号 (PK) 顧客コード ○テーブルB (伝票明細) 伝票番号 (PK) 伝票明細 (PK) 注文コード 大盛り区分 レストランなどでお客さんが注文した注文伝票を 想像していただければ良いかと思います。 一つの伝票番号に対して、複数の伝票明細があると。 DB上は上記のように格納するとします。 ここでテーブル結合を使って、各伝票の1行目の明細を表示しながら SQL1発で抜いてきたいと思います。どういうSQLを考えたら良いでしょうか? テーブルBの表示項目が1つだけなら、 SELECT A.伝票番号, A.顧客コード, (SELECT TOP 1 注文コード FROM テーブルB B WHERE A.伝票番号 = B.伝票番号) FROM テーブルA A で良いのですが、複数項目となるとどうやったら良いのか判りません。

  • 指定した行から指定した行数文データを取得したい

    WEB上で、1ページ10行のデータを表示したいので、 10行ずつデータを取得できるSQLを書きたいと思うのですが、方法が分かりません。 参考書に 41行目から50行目を取得する方法として SELECT TOP 10 A,B FROM MyTable WHERE keyID Not IN (SELECT TOP 40 keyID FROM myTable) とかかれていました。 この場合、データが keyID,A,B 1,A1,B1 2,A2,B2 ・ ・ ・ 40,A*,B* 41,A*,B* ・ ・ とkeyIDが重複しない時ですよね。 主キーが複数あるときはどのようなSQL文にすればいいのでしょうか?

  • ACCESS97でSQLを使用して全データを順に取得したい

    ACCESS97を使用しています。 あるテーブルAの全データをモジュールを組んで textファイルへ出力したいのです。 1行ずつ取得して 1行ずつ出力する方法でやっています。  この時、1行ずつ取得したいのですが  strSQL = "SELECT * FROM テーブルA ;"  上記内容だと全件取得してしまいます。  1行ずつ 取得する方法はないのでしょうか?  例えば  strSQL = "SELECT * FROM テーブルA WHERE 1行目;"  又は、全件 textファイルに出力するモジュールあるのでしょうか?

  • PEAR DBでの行取得について

    PEAR::DBにてテーブルの内容は現在下記のようにしておりますが 明示的に例えば2行目のデータを取得したい場合はどのようにすれば良いでしょうか。 $res =& $db->query('select * from shouhin'); while ($row =& $res->fetchRow()) { }

    • ベストアンサー
    • PHP
  • 2つのテーブルのカウント結果を1行で取得

    以下のようなデータ件数のテーブルが、別々のDBにあります。 SELECT COUNT(*) FROM AA.TBL01 ------ TBL01 ------ 10 SELECT COUNT(*) FROM BB.TBL02 ------ TBL02 ------ 5 それぞれのテーブルのカウント結果を、1行で取得する ことは可能でしょうか? <取得したい結果> ---------------- TBL01 TBL02 ---------------- 10 5 よろしくお願いします。 (SQL Server2005 Standard)

  • 行番号を取得するには?

    SELECT文一回で行番号を取得したいのですが うまい方法が見つかりません、 もしよい案があれば教えてください。 SELECT 行番号,FIELD FROM TABLE_A やりたいことは 最終的にCASE文を使って 例えば5行目だけNULLにしたりしたいんです。

  • SELECTでn行目から最後もしくはn行目以外が取得したい

    SELECT * FROM hoge LIMIT 10, 20 とすれば10行目から20行目が取得できるのはわかるのですが、2行目から最後までとか、1行目から最後から一行前までを取得するには? ただし、n行はWHEREで条件が指定できないもととします。 一行目にシステム上必要なデータが入っているが、クライアントがブラウザなどから表示した際に見られたくないからです。 お願いします。

    • ベストアンサー
    • MySQL
  • 2つのテーブルからレコードを抽出する方法

    お世話になります。MySQLに関する質問です。 TABLE1とTABLE2の2つのテーブルからレコードを抽出する際、 TABLE1からは全項目のデータを取得し、TABLE2からは一部の項目の データを取得したいと考えています。 条件は、TABLE1とTABLE2を[No]という項目の値で紐(ひも)づけます。 (1) SELECT * FROM TABLE1 (2) SELECT COL_A, COL_B, COL_C FROM TABLE2 上記(1)(2)のレコードを1つのSQLで取得する方法について、どなたかご教授願えますか?

    • ベストアンサー
    • MySQL
  • SQL得意な方

    仕事で困っています、 なにとぞお力添えを。 テーブル1から、TOP50 でaとbを表示させたいのです。 で、その際の条件として、 開始するレコードも指定したいのです。 下記SQLの[○]の部分に50が入っていたら、 51~100件を表示する、と、いうような。 SELECT TOP 50 a,b FROM テーブル1 WHERE c='1' AND a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a で、順調だったのですが、WHERE条件が なんだか怪しいらしく、 a >= ''の時だけはきちんと動くのですが、 ANDでc='1'をつけた所、普通に全件表示されてしまいます。 [ちゃんと51件目から100件目を表示するSQL] SELECT TOP 50 a,b FROM テーブル1 WHERE a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a [何故か全件表示になるSQL] SELECT TOP 50 a,b FROM テーブル1 WHERE c='1' AND a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a ※[何故かNOT IN (~)の部分がまったく働いていない] どうしてなのでしょう?。 解りにくい質問で大変申し訳ないのですが どなたかご教授いただけないでしょうか。

  • 重複した行と、重複していない行をわけて出力したい。

    お世話になります。Oracle9iで、 タイトル通りですが、一つの表から 重複したレコード・重複していないレコード を出力したいのですが、「こうかな?」と思った SELECT文が30分ちかく返ってきません(^^; 他に方法があれば教えて頂きたく質問致しました。 よろしくご教授下さい! (以下のSQLで、重複した行は"exists"で、 重複していない行は"not exists"もしくは "having count(*) = 1"でできるかな? と思ってましたが・・・) テーブル名:結果 キー項目(とみなすカラム):番号・名称・年月日 出力したい項目:結果.データ・もしくは結果.* --データが複数 select a.番号,a.名称,a.年月日,a.データ from 結果 a where exists --キーの重複SELECT ( select 番号,名称,年月日,count(*) from 結果 j where j.年月日 >= '1992/04/01' and j.年月日 <= '1993/03/31' and a.番号= j.番号 and a.名称= j.名称 and a.年月日 = j.年月日 group by j.番号,j.名称,j.年月日 having count(*) > 1 )