- ベストアンサー
該当件数によるフラグ条件
ORACLE10gを使用しています。 有効開始-終了日に該当する取引先レコードが複数件あった場合のみ フラグに'Y'が入っている取引先レコードを抽出したいです。 シンプルなSQLで実現したいので、アドバイスを宜しくお願いします。 SELECT a.SEIHIN_CD,a.TORI_CD FROM 製品取引先マスタ a SYSDATE>=a.有効開始日 AND SYSDATE<=a.有効終了日 GROUP BY a.SEIHIN_CD
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No1 で回答した者です。 ちょっと、雑な回答をしてしまいました、すいません。 正確には、複数件あるレコードを抽出するだけです。 SELECT a.SEIHIN_CD,a.TORI_CD FROM 製品取引先マスタ a where フラグ='Y' AND SYSDATE>=a.有効開始日 AND SYSDATE<=a.有効終了日 GROUP BY a.SEIHIN_CD,a.TORI_CD HAVING count(a.TORI_CD) > 1 ※細かな条件が把握できませんでした。 多分、フラグのYの条件はWhere句に入れてはいけないのですよかね、きっと。
その他の回答 (2)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
select SEIHIN_CD,TORI_CD from 製品取引先マスタ where フラグ='Y' and SEIHIN_CD in ( select SEIHIN_CD from 製品取引先マスタ where SYSDATE between 有効開始日 and 有効終了日 group by SEIHIN_CD having by count(*) > 1 ) ;
お礼
アドバイスありがとうございます。 お礼が遅くなり申し訳ありませんでした。 なるほど、INを使う方法もありましたか。 参考にさせていただきます。
- masa-it
- ベストアンサー率37% (9/24)
こんな感じでしょうか? SELECT a.SEIHIN_CD, a.TORI_CD FROM 製品取引先マスタ a where フラグ = 'Y' AND SYSDATE>=a.有効開始日 AND SYSDATE<=a.有効終了日 GROUP BY a.SEIHIN_CD HAVING count(a.TORI_CD) > 1
お礼
アドバイスありがとうございます。 お礼が遅くなり申し訳ありませんでした。 最初の回答で「HAVINGを使用する」というヒントをもらえたので、 ゴールに近づけました。 実際は1品目につき2件以上レコードありの場合はフラグ='Y'、 1件のみの場合はフラグ条件なしの混在情報を取得するので、 NOT EXISTSを使用して実現しました。 丁寧に二度の回答、ありがとうございました。助かりました。