- ベストアンサー
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文で抽出可能でしょうか? 以上,よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
フラグが揃わない時の、フラグは何を持ってきたいのか 判りませんが・・ こんな感じで似たような結果になるかと。 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 )
その他の回答 (3)
- webuser
- ベストアンサー率33% (372/1121)
表現がよく理解でき無い箇所が多いですが、 精一杯意訳しますと、、、 >指定された日付で「日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からのデータ抽出部分だけわかればいいのですか?
お礼
何度も申し訳ありません。m(__)m 上記の説明で間違いありません。 『時間DBからのデータ抽出』部分が知りたかったです。 無事,解決することができました。 ご迷惑をおかけしたしまして申し訳ありませんでした。 ありがとうございました。
- webuser
- ベストアンサー率33% (372/1121)
フラグが全て等しいは、 日付で絞った件数と 日付とフラグで絞った件数と を比較すれば分かります。 「その値」とは何を指しますか? どの項目を求めたいのか分からないのでSQLの書きようがありませんが、SQLで書けない事はありません。
補足
早速の回答ありがとうございます。 説明不足で申し訳ありませんでした。 「その値」とは,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)
>フラグが全て等しい場合 が、データ全件(同一日)の事を指しているのであればSQLでは無理です。 このような場合は、PL/SQLか、Accessなどで更新プログラムを作る必要があります。
お礼
ご回答ありがとうございます。 上記のSQLを参考にしてみたところ, うまく抽出することができました。 本当に,ありがとうございました。