複数条件のSQLについて

このQ&Aのポイント
  • 複数条件のSQLについて説明します
  • SQLで複数の条件を設定する方法について解説します
  • 複数の条件を使って特定のデータを抽出する方法について説明します
回答を見る
  • ベストアンサー

複数条件のSQLについて

複数のSQL条件を設定する方法について以下の内容 を実現したいと思っています (1)番号が17000以上 (2)そのなかで番号がMINの値を持ってくる TBL 作業 品目  番号     日時    数量 A    15010   05/23  20 A    15020 05/24  20 A    17010   05/25  20←ーー抽出 A    17030   05/26  20 A    17080   05/27  20 B      ・       ・     ・ C      ・       ・     ・ D      ・       ・     ・ ご教授宜しくお願い致します。

  • Oracle
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

Chronos198さんの回答以外のやり方も。 not existsを使って select 品目,番号,日時,数量 from 作業 a where a.番号 >= 17000 and not exists( select * from 作業 b where a.番号 > b.番号 and b.番号 >= 17000); とか、バージョンが明記されていませんが、row_number関数が使えるなら select 品目,番号,日時,数量 from ( select a.*, row_number() over(order by 番号) rnum f rom 作業 a where 番号 >= 17000) where rnum = 1; というのもありますね。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

select 品目,番号,日時,数量 from ( select 品目,番号,日時,数量 from 作業 where 番号>=17000 order by 番号 ) where rownum=1; 必要があれば、ORDER BY の条件に日時、品目などを追加してください。

回答No.1

まず  Select Min(番号) From TBL作業 Where 番号>=17000; これが17000以上のうち最小の番号(17010)を取得するSQL。 これを条件に値を取得する事で  Select * From TBL作業 Where 番号=(Select Min(番号) From TBL作業 Where 番号>=17000); 番号が17010のレコードを取得する事が出来ます。

関連するQ&A

  • 条件1つで複数の値を抽出することはできませんか。

    エクセルのことなのですが、条件1つで複数の値を抽出してきたいと思っています。 しかし、様々な本やインターネットのサイトを参照したのですがうまくできません。 内容なのですが、「シート1」というシートがありこのシートを「シート2」のように番号で分けて、横に並べるようなシートを作りたいと思っています。 シート1 番号 品目 100 A 100 B 101 C 101 D 101 E 101 F 101 G 101 H 101 I 102 J 103 K 103 L シート2 番号 品目 100 A B 101 C D E F G H I 102 J 103 K L すみませんが教えていただけないでしょうか。 よろしくお願いします。

  • SQL サブクエリで抽出したカラムについて

    サブクエリで抽出したカラムを 本クエリでの結果と一緒に表示したいのですが どのように実現してよいかわからず困っております。 詳細としては、下記のようなことをしたいと考えております。 文中の1)と2)は文章下部にあるSQLを指しております ----------------------------------------------------------- 最初は、1)のように凄く単純なSQLでよかったのですが 仕様が変わり、TBL2で取得した新しいカラムも一緒に 本クエリでの結果として取得できれば、SQLを2回実行せずに済むなと考えたのですが、 2)のように色々と試行錯誤したのですが、実現できません。 (2)は単なる空想ですが…) そこで、わかる方にお伺いしたいのですが、 副問い合わせで取得した複数カラムの中の1つのカラム【2)でいうところのTBL2.X】 を 2)のように"select TBL1.A , TBL2.X"として、結果を得ることは可能でしょうか。 ただし、 TBL1のカラムAは、TBL2に存在しない TBL2のカラムXは、TBL1には存在しない カラムBは、TBL1、TBL2に存在する の条件となっております 環境はMysqlです テーブル結合の方法も考えたのですが、 TBL2で、日付でソートし、その上位100件だけを 持ってきたいと思ったので、副問い合わせで一気に抽出しようとこの方法を考えまし た お分かりになる方がいらっしゃいましたらよろしくお願いします 1)SQL ------------ select TBL1.A from TBL1 where TBL1.B in ( select TBL2.B from TBL2 where 条件 ) 2)想像SQL(こんな感じの事をしたい) -------------- select TBL1.A , TBL2.X from TBL1 where TBL1.B in ( select TBL2.B , TBL2.X from TBL2 where 条件 order by TBL2.日付 desc limit 100 )

    • ベストアンサー
    • MySQL
  • SQLに関して

    環境:Oracle 11g SQLで階層問い合わせに関して教えて下さい。 今、ある部品テーブルに対し、直下のレコードのみを抽出しようとしていますが、ある共通の 構成をA部品群、B部品群の中に入れた場合、なぜか同じ結果が2回表示されてしまいます。 以下にサンプルのデータとSQLを作成しましたので、何がおかしいか教えて頂きたいと思います。 【Aテーブル】 品目番号,親品目番号 A A1,A B,A B1,B ↑ A部品群 C D,C B,C B1,B ↑ B部品群  ※ Bが共通の構成です。 【SQL】 select 品目番号 as 下位品目番号,親品目番号 from A_TABLE where 品目番号 != 'B' AND 親品目番号 = 'B' start with 品目番号 = 'B' connect by prior 品目番号 = 親品目番号 【結果】 下位品目番号,親品目番号 B1,B B1,B 2回表示されてしまいます。 単純に親品目番号=’B’としてしまえば正しく拾えますが、上記のSQLを多様している為、 何が間違っているか教えて頂ければと思います。 初歩的な質問で申し訳ありませんが、教えて下さい。

  • オラクル 名称をコードに変換

    DB初心者です。 オラクルDBでエクセルの置換処理のようなことをDB上で任意のタイミングでやりたい のですがどのような方法がありますでしょうか? ○詳細内容 変換前(※コードといいながら名称が入っている) TBL 製造 日付         コード          数量    3/1          品目A          50  TBL 品目 コード 名前 10001     品目A 10002     品目A  -------->製造TBLのコードと品目TBL名称が同じ物を抽出し、 10003     品目A         品目TBLのコードのMAXの値に変換 10004     品目B 変換後 TBL 製造 日付         コード          数量    3/1          10003          50 

  • EXCEL 複数条件 参照 (VLOOKUP?)

    エクセルで、特定のキーで別表を参照してそこから値を表示するにはVLOOKUPを使用すると思いますが、複数条件でLOOKUPする事は可能でしょうか。 シート2からシート1を参照し、 条件として、年月、品目、組織コードCD2を参照条件とし、シート1の金額1と数量1の値をシート2の同一条件の金額1と数量1に値を挿入する または、新規のシート3に統合したシートを作成したいのですが?  シート1   年月  品目 組織CD 組織CD2 金額1 金額2 数量1 数量2           1 200901 1001  40101 510010    100         1           2 200902 1001  40101 510010    200         2           3 200903 1001  40101 510010    100         1              ↑   ↑        ↑  シート2   年月  品目 組織CD 組織CD2 金額1 金額2 数量1 数量2            1 200901 1001  40101 510010          300       3       2 200902 1001  40101 510010          400       4       3 200903 1001  40101 510010          400       4       4 200901 1002  40101 510010          400       4          ↑   ↑        ↑ 回答  シート3   年月  品目 組織CD 組織CD2 金額1 金額2 数量1 数量2            1 200901 1001  40101 510010   100    300     1   3       2 200902 1001  40101 510010   200    400     2   4       3 200903 1001  40101 510010   100    400     1   4       4 200901 1002  40101 510010          400         4         ↑    ↑         ↑   判りにくい説明で申し訳ありませんが、よろしくお願いいたします。

  • SQLで集計した値を使用して条件指定したいのですが

    集計した値を条件として名称を取得したいのですが、 考えていたSQLだとエラーが出てしまいます。 SQLはOracleで動かしています。 未熟者でいい方法が思いつかないのですが、 名称を取得する方法を教えて頂けないでしょうか。 (例) 品目マスタ(mt_item) item_cd/item_name  1001/品目A  1002/品目B  1003/品目C select min(item_cd), (select item_name from mt_item where item_cd = min(item_cd)) as item_nm from mt_item group by item_nm 宜しくお願い致します。

  • サブクエリを利用したSQL文から複数の抽出条件

    例えば、以下のようなサブクエリを利用したSQL文があります。 SELECT table_a.* FROM table_a LEFT JOIN (SELECT table_b.* FROM table_b LEFT JOIN table_c ON (table_b.id = table_c.bid) WHERE table_b.type='1') AS tbl ON (table_a.id = tbl.aid) このSQL文にWHERE句で条件を指定したいのですが、サブクエリで指定しているtblテーブルのvalueフィールドが「1」と「20」のものを抽出したいと思います。 WHERE (tbl.value='1' AND tbl.value='20') としても結果が帰って来ません。 これは、WHEREする条件の数だけ、サブクエリでテーブルを作って条件を指定するのでしょうか? 効率が悪そうなので、他の方法があるのではと思いご質問させて頂きました。 お分かりになる方がいれば、よろしくお願いします。

  • SQL文について

    OracleやSQLについてはまだ初心者のレベルで理解が浅いので言葉足らずかもしれませんがよろしくお願いします。 以下のようなテーブル(名称:TBL)があったとします。 SHOP_CODE------SHOP_NUMBER----MONEY1------MONEY2 A ---------------- 1 ---------------- 100 ------------- 200 B ---------------- 2 ---------------- 300 ------------- 400 C ---------------- 3 ---------------- 500 ------------- 600 D ---------------- 4 ---------------- 700 ------------- 800 例えば、SHOP_CODEがA~Dのどれかの行(レコード)はそのまま抽出して、残った行(レコード)はMONEY1およびMONEY2を0に変更して抽出しようとした場合、 SELECT * FROM TBL WHERE SHOP_CODE = 'ここはA~Dのどれかを代入' UNION SELECT SHOP_CODE, SHOP_NUMBER, 0, 0 FROM TBL WHERE SHOP_CODE <> 'A~Dのどれかを代入' このようなSQL文を考えてみました。 しかし、比較的簡単な例ならばよいのですが、UNION前のSELECT文が複雑になってきた場合のことを考え以下のような文の作りかたができないかと思いました。 SELECT * FROM TBL WHERE SHOP_CODE = 'ここはA~Dのどれかを代入'・・・『この時点で抽出した塊になんらかの名称をつける(例:tbl)』 UNION SELECT SHOP_CODE, SHOP_NUMBER, 0, 0 FROM TBL WHERE SHOP_CODE <> tbl.SHOP_CODE・・・『このようにUNION以前に抽出した塊の名称を利用して条件を作成』 このような方法ができるとした場合、前段階で抽出した塊にどのような方法で名称をつけるのか分かりませんでした。(汗)そもそもできるかどうかもわかりませんが、、、(^^; 最初のSQL文がベターな方法なのかも分かりませんが、上記に示した方法で抽出することが可能でしょうか?もしできるのならば、前述したように名称をつけて条件を作成する方法等を教えていただきたいと思います。 おおよそ話を分かっていただければよいのですが、ものすごく簡単に言うと一つのテーブルのある行とある行に別々の処理をして再構成したいというようなイメージです。(今回はMONEYを0にすると仮定しました) できれば上記の方法に沿った考えで回答をいただけると私も助かりますが、もっと良い方法があれば是非伺いたいと思います。お時間の方ありましたらよろしくお願いします。

  • シンプルなSQLの書き方がわかりません。

    以下のSQLをシンプルに一つにしたいのですが、どのように書いたらよろしいでしょうか? どうぞご返答頂けますようお願い申し上げます。 --test1_tblの抽出 select a1 as a1, b1 as b1 from a_tbl where c=1 --test2_tblの抽出 select a1 as a1, e1 as e1 from b_tbl where rowid in (select min(rowid) from ee group by a1) and a1 is not null and a1 !=' ' order by a1 --test1_tblとtest2tblの結合 select t0.a1 as a1, t0.b1 as b1, t1.e1 as e1 FROM test1_tbl t0, test2_tbl t1 WHERE (t0.a1 = t1.a1)

  • SQLを教えてください。

    以下に5つのテーブルがあるとします。 (1)全体テーブル  ・登録順番号(Key)  ・登録名 (2)商品テーブル  ・項目コード(Key)  ・品名コード(Key)  ・商品登録順番号(Key)  ・商品サイズ(Key)  ・品名 (3)商品単価テーブル  ・項目コード(Key)  ・品名コード(Key)  ・商品登録順番号(Key)  ・商品サイズ(Key)  ・登録順番号(Key)  ・商品単価 (4)新_商品単価テーブル  ・項目コード(Key)  ・品名コード(Key(Key))  ・商品登録順番号  ・商品サイズ(Key)  ・登録順番号(Key)  ・新_商品単価 (5)詳細テーブル  ・登録順番号(Key)  ・品名コード(Key)  ・原価項目コード(Key)  ・商品数量A  ・商品数量B 上記のテーブルから、以下の条件に合致する「(1)の登録名」「(2)の品名」「(4)の新_商品単価×(5)の商品数量※」を取得したい。 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A 【条件1】全てAND条件 新_商品単価テーブルの項目コードが100  新_商品単価テーブルの品名コードが50 新_商品単価テーブルの新_商品単価×詳細テーブルの商品数量※<0 商品単価テーブルの商品単価×詳細テーブルの商品数量※>0 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A 上記で抽出出来るレコードに加えて、以下 【条件2】全てAND条件 新_商品単価テーブルの項目コードが200~300あるいは400~500 新_商品単価テーブルの新_商品単価×詳細テーブルの商品数量※=0 商品単価テーブルの商品単価×詳細テーブルの商品数量※>0 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A どのようなSQLで抽出できますでしょうか?? DBはAccessです。