• ベストアンサー

ACCESS クエリでの抽出の方法について

毎度お世話になっております。 ACCESS2003、SQLSERVER2000を使用しています。 以下のテーブルがあります。 テーブル1 フィールド1   フィールド2   A        10   A        20   A        -10   B         1   B         2   B         3 フィールド1をグループ化し、 フィールド2に0より小さい数がある場合はNG、 ない場合はOKと表示したいのです。 希望する結果 フィールド1   フィールド2   A         NG   B         OK 私が考えた方法は、 1.クエリ1(フィールド2が0以下のフィールド1を抽出する)を作成 2.テーブル1とクエリ1をLEFT JOINし、IS NULL ならOK、そうでないならNGを表示 としました。希望した結果は得られましたが、 もっとスマートな方法(一つのクエリでできるような方法)、 または別解をご教授ください。 よろしくお願いします。

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

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

SQLServer では、 SELECT フィールド1, CASE WHEN MIN(フィールド2) < 0 THEN 'NG' ELSE 'OK' END AS 結果 FROM テーブル1 GROUP BY フィールド1 フィールド1 結果 A NG B OK Accessは、CASEが使えませんので、IIFを使います。

tokonoko
質問者

お礼

回答ありがとうございます。 MIN関数は今まで使ったことがありませんでした。 SELECT テーブル1.フィールド1, iif(Min(テーブル1.フィールド2)<0,"ng","ok") AS フィールド2の最小 FROM テーブル1 GROUP BY テーブル1.フィールド1; でできました。 ありがとうございました。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

一例です。 SELECT フィールド1,IIf(SUM(IIf(フィールド2<0,1,0))=0,"OK","NG") FROM テーブル1 GROUP BY フィールド1 (1)IIf(フィールド2<0,1,0) フィールド2が負なら1、0以上は0を返す。 (2)SUM(~) 上記結果を集計する。グループ内に負があれば1以上になる。 (3)IIf(~) SUM()の結果が0なら"OK"、1以上は"NG" でも、別クエリでやる方法がスマートではないとは思えません。 質問者の方法は一般的な方法で、それが一番良いように思います。 どうしても1クエリでやるなら、()を使う方法があります。 SELECT A.フィールド1,IIf(IsNull(B.フィールド1),"OK","NG") FROM テーブル1 AS A LEFT JOIN (SELECT フィールド1 FROM テーブル1 WHERE フィールド2<0) AS B ON A.フィールド1=B.フィールド1 GROUP BY A.フィールド1

tokonoko
質問者

お礼

回答ありがとうございます。 IIF関数を使うのですね。 勉強になります。 >でも、別クエリでやる方法がスマートではないとは思えません。 >質問者の方法は一般的な方法で、それが一番良いように思います。 初心者、独学の私にはとてもうれしいお言葉です。 ありがとうございます。

関連するQ&A