• ベストアンサー

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文で抽出可能でしょうか? 以上,よろしくお願い致します。

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

  • ベストアンサー
回答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/1121)
回答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/1121)
回答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