• ベストアンサー

SQL文 教えて下さい。

以下のようなデータがあります。 ・列Aにはが1~300までの値が格納。 ・列BにはA~Zまでの値が格納。 列B、A~Zの値に対して、 列Aの値は列1~300の値を複数持つことができます。 列A 列B ----------- 1 A 2 A 3 A 6 A 1 B 3 B  : このとき、列Aの値のうち、1~10までの値を全て持つ列Bの値を抜き出すにはどういったSQL文を記述すればよいでしょうか。 よろしくお願いします。

  • Oracle
  • 回答数7
  • ありがとう数8

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

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

#6ですが、間違っているので、訂正。 select B from TBL where A between 1 and 10 group by B having count(distinct A) = 10; が正しい。

youyouyou--
質問者

お礼

ありがとうございます。 教えていただいたSQLでできました。

その他の回答 (6)

回答No.6

もっとも短い書き方は、 select B from TBL where A between 1 and 10 group by B having count(distinct B) = 10; ですかね。(これ以上簡素な書き方はないハズ)

  • agricap
  • ベストアンサー率40% (79/195)
回答No.5

No.3の改良です。ただ、このSQLがあらゆるソフトで正しいSQLとして 解釈されるかどうかはわかりません。 SELECT B FROM (SELECT DISTINCT * FROM T) WHERE A between 1 and 10 GROUP BY B HAVING COUNT(B)=10;

  • erupi1973
  • ベストアンサー率75% (27/36)
回答No.4

select 列B from テーブル where 列A between 1 and 10 という話ではなくて、でしょうか? この質問分だけでは今ひとつやりたい事がはっきりしないので、詳しく説明していただきたく(上記のSQLだと、どのように「やりたい事」の通りにならないのか)存じます。

  • X-trail_00
  • ベストアンサー率30% (438/1430)
回答No.3

select 列B from テーブル where 列A between 1 and 10 group by 列B having count(列B) = 10 列A、列Bだけで主キーに出来ないといけませんが・・・。 上記は下のパターンがある場合は上手くいきません・・・。 列A 列B ----------- 1 A 2 A 1 A 6 A 1 B 2 A といった感じで 列A、列Bがカブル場合

  • bitsu
  • ベストアンサー率34% (39/113)
回答No.2

select 列B from テーブル名 where 列A between 1 and 10; でどうでしょ?

  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

select B from XX where (A >= 1 AND A <= 10) でだめ?

関連するQ&A

  • SQL(SELECT文)を教えてください

    SQL Serverを勉強中です。 以下のようなテーブルに、同一の日付に複数の名称・値のセットが存在します。 Date(日付)  Name(名称) Value(値) 20130101      a      10 20130101      b      20 20130101      c      30 20130202      a      5 20130202      b      10 20130202      c      15 このデータを、SQLのSELECT文で取得し、以下のような表を作りたいと考えています。 a b c 20130101 10 20 30 20130202 5 10 15 行が日付、列が名称になっています。 このように取得できるSQL文を教えてください。よろしくお願いします。

  • SQL文の書き方について

    SQL初心者です。 教えてください。 A表とB表があります。 A表の伝票Noの列の値とB表の伝票Noの列の値はイコールです。 判定はB表のある別のカラム(sample)と変数Zに格納されている値がイコールという 条件で合致するA表のデータを抽出したいです。 LEFT JOINもしくはINNER JOINなどを使って書けば良いのでしょうか? 例えば SELECT * from A表 INNERJOIN B表 on A表.伝票No = B表.伝票No where B表.sample = 変数Z などと書けば良いのでしょうか?

  • SQL文をご教授願います

    SQL文をご教授願います。 以下のようなテーブルを仮定しています。 A   B    C   D ---------------------- 10  100  1203 A 10  200  1204 B <--- 取得したい 11  300  1203 C 11  300  1204 D <--- 12  400  1206 D 12  500  1207 E <--- ・ ・ A列をー意にして、A列・D列のデータを取得したい 条件 Bの大きい方を取得する Bの値が同じ場合はCの大きい方を取得する。 (A列には同じデータが2以上あるとします) (C列には同じデータはありません) 欲しい結果 A   D -------- 10 B 11 D 12 E

  • SQL文を教えてください

    A B C --------- 11 22 33 44 55 33 上記のように、同じ値を持つレコードが2件以上あるC列の値を取得するにはどのようなSQL文にすればよいでしょうか。 よろしくお願いします。

  • 最大バイト数を調べるSQL文を教えてください

    SQL初心者です。 初歩的なSelect文だと思うのですが、 以下のSQLの書き方を教えてください。 「テーブルAの列Bに入っている文字列のバイト数のうち、  最大のバイト数の値を返すSQL」 バイト数をすべて取得するのであれば SELECT LENGTHB(B) FROM A になるかと思うのですが、最大のものを 求める書き方がわかりません。 よろしくお願いします。

  • SQL文で

    すみません。質問させてください。 A,B,C,D,Eと5個のフィールドで構成されたテーブルtableがあるとします。 tableにはデータがすべて格納され(NULLなし)ています。 ですが、フィールドA,C,DについてA,C,Dとも同じデータが格納される ことがあります。 その重複したデータ以外を取得したいのですが (要するにフィールドA,C,Dでユニークのデータのみ取得) SQL文でどのように書けばいいかわかりません。 よろしくお願いいたします

  • SQL文での条件分岐

    列a,b,cから構成されるテーブルAが存在します。 これをテーブルB(列d,e)に以下の流れでコピーしたいのです。 ・a列の値 → d列 にコピー ・aの値が"1"ならば、b列の値 → e列 にコピー / "1"以外は、c列の値 → e列 にコピー としたいのですが、これをSQL文だけで書けますか? ストアドを書くのであれば、どのような感じで書けばいいのでしょうか? ヒントだけでも結構ですので、分かる方はお教えいただけますか?

  • SQL文を教えてください

    SQLを教えてください。 以下のようなテーブルを仮定しています。 A  B  C -------------- 10 12 1201 11 12 1203 11 13 1205 12 12 1206 A列をー意にして、A列とB列の全データを取得 したいのですが、2・3行目のような場合は C列の大きい方を取得したいのですが・・・ 欲しい結果 A  B C -------------- 10 12 1201 11 13 1205 <--- 12 12 1206

  • こんなSQL文

    Oracle8.1.7を使用しております。 以下のようなテーブルに対し、1行目と2行目を削除するSQL文を書きたいのですが、思いつきません。どなたか、アドバイスいただけないでしょうか? 表名:A   B | C ――――――――   2 | 10   2 | 1   1 | 10   1 | 1   1 | 11   1 | 2   1 | 1   3 | 10   2 | 3 変数として、P1=1とP2=2があります。(これは、SQL文の中に直接書くものとします。) ここで、SELECT B,C FROM A WHERE B=1;とSELECT B,C FROM A WHERE B=2;を実行すると、次のようになります。   B | C     B | C ――――――――― ―――――――――   1 | 10    2 | 10   1 | 1     2 | 1   1 | 11    2 | 3   1 | 2   1 | 1 ここで、それぞれの表を見ると、Cの値が一致している部分があります。この一致していて、Bが2の行を削除したいのですが、SQL1文では無理でしょうか? 最近、SQLには慣れてきたつもりだったのですが、こんなとこでつまずくとは・・・どうぞよろしくお願いします。

  • SQL文 特定のレコードを抽出したい

    以下のようなテーブルAがあったとします。 年月日,項目B ---------------------- 20080101 100 20080102 100 20080103 200 20080104 400 20080105 400 20080106 200 SQL文にて、データの抽出を行いたいのですが、 抽出したいのは、データに変更があった年月日と項目Bの値です。 年月日,項目B ---------------------- 20080101 100 20080103 200 20080104 400 20080106 200 前の年月日と比較し、項目Bに違いがあった場合のデータだけ抽出したいのですが、SQL文で行うことは可能でしょうか?? 環境は、SQL Server 2005 です。