• ベストアンサー

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
  • 回答数4
  • ありがとう数2

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

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

フラグが揃わない時の、フラグは何を持ってきたいのか 判りませんが・・ こんな感じで似たような結果になるかと。 select YEARMONDAY, minflg FLG, case when minflg=maxflg then sumdata else 0 end DATA from ( select YEARMONDAY,min(FLG) minflg,max(FLG) maxflg.sum(DATA) sumdata from 時間DB group by YEARMONDAY )

-cinq-
質問者

お礼

ご回答ありがとうございます。 上記のSQLを参考にしてみたところ, うまく抽出することができました。 本当に,ありがとうございました。

その他の回答 (3)

  • webuser
  • ベストアンサー率33% (372/1120)
回答No.4

表現がよく理解でき無い箇所が多いですが、 精一杯意訳しますと、、、 >指定された日付で「日DB」の作成を行う。 「指定」とはWHRER句で別途直に入れる条件 「日DBの作成を行う」とはcreate database やcreate tableで枠を作成するのではなく、 既に作成済のテーブル「日DB」に対しデータを出力するという事。 出力するのは「時間DB」の指定条件内で項目「DATA」を合計して1件。 ただし、項目「FLG」が指定条件内に2種類以上存在する場合は項目「FLG」を0にして出力。 input:時間DB output:日DB 日DB.YEARMONDAY = 時間DB.YEARMONDAY = 指定した条件 日DB.FLG = 時間DB.FLG(但し、全部が一致しない場合は0) 日DB.DATA = 時間DB.DATAの合計 で、あってます? 『時間DBからのデータ抽出』と『抽出したデータを日DBに出力』するのは1回のSQLでやりたいのですか? それともとりあえず時間DBからのデータ抽出部分だけわかればいいのですか?

-cinq-
質問者

お礼

何度も申し訳ありません。m(__)m 上記の説明で間違いありません。 『時間DBからのデータ抽出』部分が知りたかったです。 無事,解決することができました。 ご迷惑をおかけしたしまして申し訳ありませんでした。 ありがとうございました。

  • webuser
  • ベストアンサー率33% (372/1120)
回答No.2

フラグが全て等しいは、 日付で絞った件数と 日付とフラグで絞った件数と を比較すれば分かります。 「その値」とは何を指しますか? どの項目を求めたいのか分からないのでSQLの書きようがありませんが、SQLで書けない事はありません。

-cinq-
質問者

補足

早速の回答ありがとうございます。 説明不足で申し訳ありませんでした。 「その値」とは,FLGの値は現在の所1~4の値が入って くる予定です。 その為,日付で絞った際に1時~24時のレコードがすべて 「1」だった場合は「1」を「2」の場合は「2」というように取得できたらと思っています。 フラグを抽出しないのであれば, SELECT SUM(DATA) FROM 時間DB WHERE YEARMONDAY = 20050528 AND HOUR >= 1 AND HOUR <= 24 でよいのでしょうが,この文に FLGを抽出する条件をつける方法がわかりません。 よろしくお願いします。

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

>フラグが全て等しい場合 が、データ全件(同一日)の事を指しているのであればSQLでは無理です。 このような場合は、PL/SQLか、Accessなどで更新プログラムを作る必要があります。

関連するQ&A

  • ある条件のSELECT文の作成について

    以下のSQLの作成で悩んでいます。 【内容】 抽出元テーブルの中で、あるコードが同じデータは、 ある項目を全て同じ値にして取得したい。 (例) ■抽出元テーブル コード SEQ FLG  1    1   1  1    2    1    3    2    1   0  2    2  2    3  3    1   1 コードは同じ物が1つ又は複数あります。 コードが同じ物にはSEQで番号が連番されます。 FLGの項目がありますが、SEQ=1のデータしか設定されていません。 ■求めたい結果 コード SEQ FLG  1    1   1  1    2   1    1    3   1  2    1   0  2    2   0  2    3   0  3    1   1 全てのデータでFLGを求めて取得します。 取得の仕方はコードが同じでSEQ=1の値を取ります。 抽出元テーブルと結果のデータ件数は同じになります。 抽出元テーブルと結果の違いは、FLGに値が埋まっているかどうかの違いのみです。 このテーブルのFLGはUPDATEする事は出来ません。 別表なども利用しないで、 selectのSQL文だけで対応したいです。 どのような方法で対応できるでしょうか? オラクルのバージョンは10gです。 よろしくお願い致します。

  • SELECT文の書き方

    すみません、いつもお世話になっております。 以下のようなDBの内容の場合、契約日が現在の年月から1年以内のみ抽出して 面積を合計する というSELECT文を書きたいのですがよく分かりません。 宜しくお願いします。 ※現在は2006年01月ですので条件は契約日が2005/01/01~現在日付となります。 DB名 物件情報 物件番号   契約日    面積 1     2006/01/12    24.35 2     2005/10/01    30.01 3     2004/12/10    18.22 4     2005/08/20    24.00 5     2005/04/07    38.75

  • 重複の抽出

    カレンダーのようなものを作ってスケジュールの管理をしたいと思い、 start_at datetime end_at datetime sunday boolean monday boolean tuesday boolean ... のように予定の開始・終了時間と、定期的な予定用に曜日のフラグを立てるためのフィールドを用意しました。 データ作成時にすでに登録してある予定と被っているものを抽出したいのですが、 たとえば 毎週月・水・木曜 10:00~12:00 のデータが登録してあり、 1/4 14:00 ~ 1/10 10:00 みたいなデータを新たに登録しようとした場合にどういう風にSQLを書けばいいのかがよくわかりません。 日付から曜日を割り出して、たとえば0なら日曜のフラグがたっているものを抽出するみたいなSQLをかけるのでしょうか? できれば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の作成方法が分かりません。 どのように作成すれば良いでしょうか?

  • SELECT文を発行して、ACCESSより取得する方法

    既存のプログラムを元に、 以下のようなソースを作成したのですが、 取得出来ませんでした。 参照設定やパスの設定、SQL文は正しいです。 どこがマズイのでしょうか? アドバイスをお願い致します。 Dim db  As DAO.Database Dim rs  As DAO.Recordset Dim SQL As String 'データベース接続 Set db = OpenDatabase("DBのパス") 'データ検索SQL SQL = "" SQL = " SELECT文 " 'ACCESSより取得 Set rs = db.OpenRecordset(SQL) db.Close rs.Close

  • SQLServer7.0で、SELECT文で列を抽出する ※Nullと0の条件について

    SQLServer7.0で、SELECT文で列を抽出する際なんですが、 列A 列B --------- 1  Null 2  Null 3  1 ↑のテーブルから、列Aの1、2だけを抽出するSELECT文を SELECT * FROM XXX WHERE 列B <> 1 と作成したのですが、うまく動作しません(汗) データが一件も取れないのです。(列B:tinyint型、Null許容) テーブル内のデータをNull→0にして、同SELECT文で抽出すればうまくいったのですが。。 Nullデータを、<>XX という条件で取得することはできないんですかねえ・・・。 それとも、テーブルの設定か、条件の記述方法がまずいんでしょうか。 どなたか、ご存知あればアドバイスをお願いします。

  • 日付型(時刻含む)を抽出条件にして行を抽出したい。

    はじめまして、よろしくお願いします。 現在SQLサーバー2000を使用してこの処理を行おうと思っております。 一度テーブルに格納したデータをSELECT文を使って抽出したい と思っているのですが、WHERE条件に日付型のフィールドを指定するとうまく行きません。(時刻が日付型のフィールドに入っている場合、うまくいきません。) やっていることは YMD(DATE型・主キー)、ID(VERCHAR型・主キー)、NAME(VERCHAR型) というのテーブル(テーブル名:MEIBO)に入っている 2002/02/02 14:10:55、0001、山田 太郎 というデータを 取込年月日、個人IDを指定して特定の列を取り出そうとしています。 SQL文は SELECT * FROM MEIBO WHERE YMD = '2002/02/02 14:10:55' AND ID = "0001' と記述していますが、一件もヒットしません。 DATE型のフィールドにはINSERTするときにGETDATE()をつかってシステム日付を 格納するようにしています。 GETDATE()ではなく、DATE()を使ってシステム日付を格納した 2002/02/02、0001、山田 太郎 という時刻の入っていないデータに対しては SELECT * FROM MEIBO WHERE YMD = '2002/02/02' AND ID = "0001' というSQL文でヒットするのですようです。 時刻が入ったらそのフィールドを抽出条件として使うことは無理なのでしょうか? 基本的な部分で勘違いしているのかもしれませんが なにかお気づきの点がありましたら、ご教授ください。

  • セレクト文について

    sqlのセレクト文について質問させて下さい。 フィールドのレコードに、a,b,c,d,eと登録されているデータから、"c"のデータだけをセレクト対象にしたい場合、どのようにsqlを書けばよいのでしょうか? 通常のセレクト文だと、WHERE句に、(フィールド名 = '値')などで格納されている値とデータの比較ができるかと思うのですが、上記のような場合はどのように指定するのでしょうか? フィールドを無駄に増やし過ぎないよう、カテゴリごとに配列をjoinでまとめたものをDBへ登録しているのですが、この場合だとイメージしているようなことは無理なんでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • SQLの抽出方法を可能か教えてください

    初めましてm(__)m SQLを最近始めたばかりの為、次のような場合の抽出条件がわかりません。 どなたかご存知の方がいましたら、回答をよろしくお願いいたします。 次のようなDBがあったとします。 項目1  項目2  項目3 001   aaa   003 002   bbb   005 003   ccc   004 004   ddd   005 このDBに対し、検索条件を項目1=004とした場合に、次のように抽出したいのですが、どうすればよろしいですか? 001   aaa   003 003   ccc   004 004   ddd   005 ※項目1の値が項目3と一致したらそのデータも抽出し、更にそのデータの項目1の値が項目3と一致したらそのデータも抽出するみたいにしたいと考えているのですが可能でしょうか? 以上です。 分かる人がいましたら、よろしくお願いします。

  • DB抽出の日付が参照できない

    DB抽出データをエクセルに出力して仕事用に参照しています。 エクセルA列1に任意の日付を入力して、仕入れの集計をしてるのですが、参照してくれません。(一致しない?) 抽出されたエクセル日付列のデータ書式定義をみると、 「ユーザー定義dd-mmm-yyyy」となっており、 データは、 (例) 日付列 2008/6/10 6:53:41 と時間まで入っていました。 DBに書き込まれた時間だと思いますが。。。? A1に任意入力「6/10」して、日付列と一致した場合に、 仕入れ数を合計したいのですが、 条件を B1=A1 B1=DAY(A1) B1=MONTH(A1)・・・ などいろいろ試みたのですが、抽出してくれませんTT 日単位でいいのですが、時間まで一致しないとだめなのでしょうか? スキル足りません・・・お力を