- ベストアンサー
ユニークなナンバーのデータの抜き出し(SQL)
すいません。 うまくいかないので、質問させていただきます。 ユニークなナンバーの振られたデータを100件だけ抜き出したい。 また、ナンバーの若い順にならんでるとは、限りません。 とりあえず、上から100件抜き出したいのです。 データは、以下のようになっています。 1 赤 3 黄 12 青 7 緑 ・ ・ 100 黒 105 白 100件を抜き出すSQLは、どのようにして考えたら良いでしょうか? 実際にSQLを教えて頂けたら、助かります。 よろしくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
結果の行数を100件に抑制したいということなら、 set rowcount 100 select ほにゃらら とすれば100件だけの結果を取り出せます。set は接続レベルで 設定が持続するので、次のクエリを実行する前に set rowcount 0 を忘れないよう実行してください。
その他の回答 (5)
- urk
- ベストアンサー率33% (18/53)
Oracle8iでは 8iからの機能でROWNOができました。 select * from TABLE where ROWNO<101 で、とにかく100件でてきます。 sybaseはどうでしょうか?
お礼
ご回答ありがとうございます。 sybaseでは、「set rowcount」の指定を行う事で 成功致しました。 しかし、オラクル用やら、sybase用やら、統一して欲しい ですね(愚痴になってしまいますが。) これから、勉強する方は、大変ですぅ。 がんばりたいと思います。 ありがとうございました。
- stork
- ベストアンサー率34% (97/285)
>オラクルで言う所の疑似列を想定して100件抜き出した >いなぁ~って思いました。 >SELECT * FROM table_name WHERE ROWNUM <= 100 >ORDER BY id sybase使ったこと無いんですが、sybaseでしたらtopですかね。 select top 100 * from table_name order by id
お礼
ご回答ありがとうございます。 sybaseでは、topを指定すると、エラーでちゃいました^^;; どうやら、だめみたいです。 アドバイスして頂いた気持ちが嬉しかったです。 ありがとうございました。
- Haizy
- ベストアンサー率40% (404/988)
こんにちは。 多分、ナンバーは、ユニークでかつ連続番号ではないのですね。 データのテーブルを 「データ」として、ここに、「ナンバー」「カラー」のカラムがあるということで、よろしいでしょうか。 まず、順位をつけて、その順位に制限をかけてみましょうか。 |select a.順位,a.ナンバー,a.カラー |from( | select( | select count(*)+1 | from データ | where データ.カラー < s.カラー) 順位 , s.ナンバー, s.カラー | from データ s))a |where 順位<=100 |oeder by 順位 つまり、データをデータ(S)と比較し、自分より小さい数をカウントしたものを+1したものが順位です。それをfrom句にいれて、サブクエリとしています。 こんな感じですか。 あ~~DBで、実際走らせていないので・・・・。(この辺が”自信なし”) 構文エラーとか、そん時は、ゴメンナサイ。 何かあったら補足ください。 でわでわ
お礼
ご回答ありがとございます。 set rowcount 100と言う指定でできました。 こちらも、色々な考え方があると思い、勉強になりました。 ありがとうございました。
- zerosix
- ベストアンサー率31% (47/149)
>データは、以下のようになっています。 >1 赤 >3 黄 >12 青 >7 緑 ・ ・ >100 黒 >105 白 フィールド構成が分かりません。 idと色は同じフィールドですか? テーブル定義はどうなっているのですか? あと、 >とりあえず、上から100件抜き出したいのです。 DBに上からという概念はありませんよ。降順とか昇順とかで並び替えは できますが。
補足
すいません。質問の仕方が下手でした^^;; idと色は、別のフィールドです。 オラクルで言う所の疑似列を想定して100件抜き出したいなぁ~って思いました。 SELECT * FROM table_name WHERE ROWNUM <= 100 ORDER BY id こんな感じの事が、したいのです^^ ちなみに、DBには、sybaseを使用しています。 ですので、oracle固有のものが使えなくて、困っています。 よろしくお願いします。
- kusukusu
- ベストアンサー率38% (141/363)
select * from table_name order by number LIMIT 0 OFFSET 100
お礼
ご回答ありがとうございます。 質問時に書き忘れていたのですが、DBにsybaseを使用しています。 LIMITか、OFFSETが、Oracle固有のものみたいで、失敗しました^^;; sybaseでも、使用できる形で何かあれば、アドバイスよろしくお願い致します。
お礼
ご回答ありがとうございます。 set rowcountを使用すると、ビシッと成功しました。 接続レベルで設定が維持される事をわきまえて、 使いたいと思います。 ありがとうございました。