dポイントプレゼントキャンペーン実施中!

データベースはOracleで、SQLでWhere区の条件にヒットしたレコードと、そのレコードより後ろ10件のレコードも抽出したい場合何か良い方法ありますか?

例.商品マスタがあって、商品CD=1111で検索した場合は、商品CDが1111より後ろ10件のレコードも抽出したい。

商品CDは連番になっていない部分もあります。

A 回答 (5件)

SELECT *


 FROM
  (SELECT "商品CD", ...
   FROM table1
   WHERE "商品CD" >= 1111
   ORDER BY "商品CD")
 WHERE ROWNUM <= 10

ROWNUMが振られるのはORDER BYの前です。大小の比較ができるのは数値のみなので、商品CDが文字列の場合、他の方法を探す必要があります。

Oracle9i SQLリファレンス P2-86 参照
~以下引用~
同じ問合せでROWNUM にORDER BY 句が続く場合、ORDER BY 句によって行が再び順序付けられます。結果は、行がアクセスされる方法によって異なります。たとえば、ORDER BY 句の指定によってOracle が索引を使用してデータにアクセスする場合、索引なしの場合とは異なる順序で行が取り出されることがあります。そのため、後続の文には前述の例と同じ効果はありません。
SELECT * FROM employees WHERE ROWNUM < 11 ORDER BY last_name;
ORDER BY 句を副問合せに埋め込んでROWNUM 条件をトップレベル問合せに置いた場合、行の順序付けの後でROWNUM 条件を強制的に適用させることができます。たとえば、次の問合せは、小さい順から10 個の従業員数を戻します。これは、上位N 番までの問合せと呼ばれることがあります。
SELECT * FROM
(SELECT * FROM employees ORDER BY employee_id)
WHERE ROWNUM < 11;
前述の例では、ROWNUM 値はトップレベルのSELECT 文の値です。これらの値は、副問合せ内のemployee_id によって行が順序付けられた後で生成されます。
    • good
    • 0

OracleだとROWNUMを利用するしかないかな????



SELECT Code, Name FROM Item
WHERE Code >= 1111
AND ROWNUM <= 10
ORDER BY Code

SQL ServerだとTOP関数が利用できるんですけどね。
    • good
    • 0

Oracleですよね?


#1の方が書かれてるTop句は使えるのかなぁ・・・?

こんな感じでいかがでしょう?
select AA,BB
from (select AA,BB from test where AA >= '1113')
where rownum <=10
    • good
    • 0

 データベースの中には「順番」は“ありません”ので、「ピンポイントでヒットしたものより後ろ」という抽出はできません。



 SELECTで取り出せる順番は、一定しているようですが、内部的なインデックスが変わると、変わります。

 商品コードが数値であるという前提で、指定した数値よりも商品コードが大きいレコードから、商品コードの昇順にならべて、先頭から10件取り出す、ということはできます。←過去、いたるところで質問されています
    • good
    • 0

TOP句を使います。

詳細は参考URLを。

参考URL:http://www.agtech.co.jp/html/v8manuals/whnew/whn …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A