SQLの作り方についてご教授下さい。
- SQLの作り方についてご教授下さい。DBの中から特定の条件でデータを抽出する方法を教えてください。
- 抽出条件として、フラグが1であるデータのみを抽出し、同じNoについては1件のみ出力する方法を教えてください。
- 抽出結果のデータはフラグが1であるもので、金額が大きい順に並べる必要があります。どのようにSQLを作成すれば良いでしょうか?
- ベストアンサー
SQLの作り方についてご教授下さい。
SQLの作り方についてご教授下さい。 以下のようなDB及び条件があるとします。 ・DB ---------------------- No フラグ 金額 1 1 100 2 0 200 3 0 700 3 1 500 3 1 400 ---------------------- ・抽出条件 フラグが1である物のみ抽出対象とします。 同一Noについては、1件しか出力しません。その1件の決め方は フラグが1である事が前提で、金額が大きい物を取得します。 上記の抽出したい結果 ------------------ No フラグ 金額 1 1 100 3 1 500 ------------------ これを取得するSQLの作成方法が分かりません。 どのように作成すれば良いでしょうか?
- evaag777
- お礼率51% (88/172)
- Oracle
- 回答数3
- ありがとう数6
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
select * from DB a where 'フラグ'=1 and '金額'=(select max('金額') from DB b where a.No = b.No and 'フラグ'=1) くらいでよいですか? 質問に書いてある以上のフィールドがあって、ちゃんとレコードを選択する必要があるなら、こうなると思います。 本当に、質問に書いてあるだけのフィールドで、金額の数字さえ解ればよいのであれば、No.1さんの解答の方が、シンプルですね。
その他の回答 (2)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
select No,フラグ,金額 from ( select No,フラグ,金額,row_number() over(partition by No order by 金額 desc) R from DB where フラグ=1 ) where R=1 ; とか。
お礼
時間があれば、この方法も試してみたいと思います。ご回答ありがとうございます。
- taka451213
- ベストアンサー率47% (436/922)
こんばんは。 普通に・・・、 SELECT No, フラグ, MAX(金額) FROM DB WHERE フラグ = 1 GROUP BY No, フラグ じゃ駄目なの?
お礼
解決いたしました。ご親切にどうもありがとうございます。
関連するQ&A
- SELECT文での抽出条件
以下のような処理を行いたいと思いますが SQL文の作成方法を御教授下さい。 【時間DB】 YEARMONDAY,HOUR,FLG, DATA ----------------------------- 20050528 1 1 10 20050528 2 1 20 20050528 3 1 30 20050528 4 1 40 . . . 20050528 22 1 40 20050528 23 1 50 20050528 24 1 60 【日DB】 YEARMONDAY,FLG, DATA ----------------------------- 20050528 1 250 処理内容:指定された日付で日DBの作成を行う。 抽出条件:フラグが全て等しい場合はその値を取得 :フラグが一致しない場合は0を取得 上記の場合,SQL文で抽出可能でしょうか? 以上,よろしくお願い致します。
- ベストアンサー
- Oracle
- SQLの作成について
SQLの作成について 以下のようなDBがあるとします。 ---------------------- DB1(マスタ) 区分 フラグ 名称 A 1 男 A 2 女 B 1 車 B 2 飛行機 B 3 電車 C 1 コンビニ C 2 スーパー C 3 百貨店 D 1 デスクトップ D 2 ノート ---------------------- ----------------------- DB2 区分1 フラグ1 名称1 ・・・ 区分4 フラグ4 名称4 A 2 D 1 ----------------------- DB2の区分とフラグから、DB1を参照して 取ってきたDB1の名称をDB2に書き込みたいです。 名称の1つ毎に、SQLを発行し、それぞれ名称を取得するなら where DB1.区分=DB2.区分 and DB1.フラグ = DB2.フラグ みたいな感じでそのまま出来ると思いますが、 今は、1つのSQLでDB2の複数の名称を一気に取得したいと考えてます。 どのようなSQLが良いのでしょうか
- ベストアンサー
- Oracle
- SQL上位n件ORDERBY 以降ORDERBY
SQLのORDER BYについてご教授いただけますでしょうか。 例えば、10件のデータのうち、5件を指定のORDERBYで抽出し、 残り5件をORDERBYで抽出するということは可能でしょうか。 ID 名前 システムフラグ 1 AAA 1 2 BBB 1 3 CCC 1 4 DDD 1 5 EEE 1 6 FFF 2 7 GGG 2 8 HHH 1 9 III 1 10 JJJ 1 上記のようなデータがあった場合、 以下のように抽出されるようにしたいと思っています。 ID 名前 システムフラグ 1 AAA 1 2 BBB 1 3 CCC 1 6 FFF 2 7 GGG 2 4 DDD 1 5 EEE 1 8 HHH 1 9 III 1 10 JJJ 1 システムフラグが2が入っているものは、 5件からの4,5件目に表示されるようにして、 それ以降はIDの昇順で表示されるようにしたいと思っております。 5件というのは、決め打ち5件ではなく、条件によっては変わるのですが、 5件が7件となった場合は、6,7件目がシステムフラグ2のものがくるようにしたいです。 指定した件数から下2つ目がシステムフラグのものが取得したいということです。 わかりにくいと思いますが、どのようなSQLを書けば抽出できるか ご教授いただけますでしょうか。 どうぞ宜しくお願い致します。
- ベストアンサー
- SQL Server
- SQLの取得方法について
SQLの取得方法を考えてます。 テーブルA キー番号 利用フラグ 内容 1 1 りんご 2 0 みかん 3 0 なし 4 1 すいか 5 1 ぶどう 上記のような5件のデータがあるとします。 出力する時は、1件(縦もち=>横もち)にします。 キー番号が小さい順で、利用フラグが1の物を出力します。 利用フラグが1の物は最大でも3件しかありません。 その為、出力テーブルも3件分しかありません。 利用フラグが1の物が3件無い場合は、ある分だけ出力します。 上記データの時の出力結果想定 テーブルB キー番号1 内容1 キー番号2 内容2 キー番号3 内容3 1 りんご 4 すいか 5 ぶどう これをどのようなSQLで実現できるでしょうか? 方法がよくわかりません。
- ベストアンサー
- Oracle
- SQlを使用して指定レコードの削除を行いたい
SQL構文を使用して、テーブル内の指定のデータを削除したいと思っています (oracle11gです) 条件抽出テーブル:PRM_A 抽出条件1の対象カラム:NO_1(6ケタで年月が入っている) 抽出条件2の対象カラム:NO_2(0か1が入っている) 抽出内容:NO_1の年月のうち、最小の値かつ、NO_2の値が0である →抽出結果として、6けたの年月が出力される 削除対象テーブル:DEL_TBL_A 削除条件用カラム1:DEL_COL_1 削除条件用カラム2:DEL_COL_2 削除条件:DEL_COL_1が「抽出結果」の1~4桁目(4桁の数値)と一致し、 DEL_COL_2が「抽出結果」の5~6桁目(2桁の数値)と一致する 以上の処理を行おうとして、まずは前半部分(抽出結果の抜き出しまで)を行いました。 select min(NO_1) from PRM_A where NO_2=0 上記で、想定できる結果の出力ができました。 その次に、削除条件を作成しようとしたのですが、下記の記載で実施したところ、 Error [row:3,col:130] ORA-00936: 式がありません。 と出力されました。 select substr((select min(NO_1) from PRM_A ),1,4) from PRM_A where NO_2=0 and (select min(NO_1) from PRM_A) ; 申し訳ございませんが、理由と正しいSQL文がお分かりになられる方がおりましたら、ご教授願えませんでしょうか
- ベストアンサー
- Oracle
- SQLの書き方について
以下の様なデータある場合 【Aテーブル】 ------------- NO,ITEM, KOSU ------------- 1 ,001 , 1 2 ,002 , 3 3 ,003 , 1 【Bテーブル】 ------------------- NO,NENDO,CODE,BIKO ------------------- 1,2006 , 1 , 1111 1,2007 , 0 , 1111 1,2007 , 2 , 1111 2,2007 , 0 , 2222 3,2007 , 0 , 3333 3,2007 , 1 , 3333 ------------------------------ NO,NENDO,CODE,BIKO,ITEM,KOSU ------------------------------ 1,2007 , 0 , 1111,001 , 1 2,2007 , 0 , 2222,002 , 3 3,2007 , 0 , 3333,003 , 1 と出力。(キーはNo) NO毎のかつ年度の降順、コードの昇順で最新の1件を 取得するにはどのようなSQLを作成したらよいのでしょうか?
- 締切済み
- SQL Server
- SQLについて教えてください
SQL*plusで次のようなことをしたいのですがSQLでどのように書けばよいでしょうか? 教えてください。 以下の「マスターデータ」「県名マスター」「種別マスター」が存在しています。 1.県コード、種別コードでグルーピングします。 2.県名を県名マスターの県コードで一致させて取得します。 3.種別名称を種別マスターの種別コードで一致させて取得します。 4.年月日が最新のレコードを取得します。 ※ただしフラグ0、2が存在する場合はフラグ2の年月日が最新のものを取得します。 データレポートを使用しているためSQLでやるしかないのですが。。。 すみませんがよろしくお願いします。 【マスターデータ】 県コード 種別コード 年月日 金額 変更年月日 フラグ ------------------------------------------------------------------------- 11 02 20080101 100 20080201 0 (1) 11 02 20080102 200 20080202 2 (2) 11 03 20080103 300 20080203 0 (3)種別03のため対象外 12 03 20070101 400 20070201 2 (4) 12 03 20070102 500 20070202 0 (5) 12 02 20070103 600 20070203 1 (6)フラグ1のため対象外 13 03 20070102 700 20070202 0 (7) 【県名マスター】 県コード 県名 ------------------------------------------------------------------------- 11 埼玉県 12 東京都 13 千葉県 【種別マスター】 種別コード 種別名称 -------------------------------------------------------------------------- 02 1種 03 2種 【結果】 県名 種別名称 年月日 金額 変更年月日 フラグ -------------------------------------------------------------------------- 埼玉県 1種 20080102 200 20080202 2 (2) 東京都 2種 20070101 400 20070201 2 (4) 千葉県 2種 20070102 700 20070202 0 (7)
- ベストアンサー
- その他(データベース)
- SQLで一定時間周期毎の抽出方法を教えてください
初めまして、SQL初心者です 知りたい内容は、 時刻 値1 値2 状態フラグ でデザインされた単表です 中身は1分毎の時刻と、値1,2には数値 状態フラグには0または1のデータが存在します。 こういった表からの抽出条件ですが、一番新しい時刻から 状態フラグは1や0に関わらず5分おきのデータで、値1、値2は、5分間内で状態フラグが0だけの物を値1、値2と別々に平均したSQL文の記述方法です。 5分というのは、ひとつの例で1分毎だったり10分毎の場合もあります。 5分毎というと5レコードづつ存在しますので平均を求められますが1分毎となると全レコードが対象になりまので。1分毎の平均値を求めても意味ないと思いますがそれでも値取得はOKでしょうか? よろしくお願いします。
- ベストアンサー
- その他(データベース)
- SQL SELECT(Oracle 11g)
SQLのご質問です(Oracle 11g)。 No 商品 1 A 1 B 1 C 2 A 3 A 3 D 4 E 【下記条件】 Aの商品が含まれている場合対象 また、BとCが混じっていても対象 その他の商品(AとBとC以外)が混じっていると非対象 結果 No 1,2が出力 とのSQLを作成したいのです。 条件が上手く浮かびません。 有識者の方ご享受宜しくお願い致します。
- ベストアンサー
- Oracle
- SQL SERVER 店舗毎のTOP10
表題の件のSQLについてアドバイスお願いいたします。 DB:SQL SERVER 2008 R2 テーブル:売上伝票 カラム 店舗|伝票No|伝票日付|商品CD|商品名|数量|単価|金額(数量x単価) SELECT TOP 10 店舗NO, 商品CD, 商品名, SUM(数量) AS 販売数, SUM(金額)AS 販売金額 FROM 売上伝票 WHERE 伝票日付 BETWEEN [開始日] AND [終了日] GROUP BY 店舗NO,商品CD,商品名, ORDER BY 店舗NO,販売金額 DESC 当然ですが、上記のSQLでは、一番若い店舗NOのトップ10しか抽出できません。 店舗別、販売金額のトップ10を抽出するための、SQL文についてお教えください。
- 締切済み
- SQL Server
お礼
上手く行きました。皆さんどうもありがとうございます。