Access2003 複雑な条件のデータ抽出
- Access2003で複雑な条件のデータ抽出方法について紹介します。
- フィールド[C]の値を条件に従って他のフィールドに抽出する方法を解説します。
- SQLを使用せずに関数式を使って条件指定をする方法も紹介します。
- ベストアンサー
Access2003 複雑な条件のデータ抽出
☆1つのテーブルで、フィールド[A]~[C]があり、文字および英数字のデータが混在しています。 (ただし、フィールド[C]には、空欄(Null)になっている場合があります) =========================================================== (テーブル(1)) No [A] [B] [C] [D] [E] [F] 1 111 X あ 2 222 X か 3 333 X さ 4 111 Y た 5 222 Y (Null) 6 333 Y は 7 222 Z ま 8 333 Z や 9 111 Z ら =========================================================== [課題] (1) テーブル(1)のフィールド[A]の値を参照し、「111」の場合は、 フィールド[C]の値を[D]へ抽出する([B]でグループ化) (2) 同様に、フィールド[A]の値を参照し、「222」の場合は、 フィールド[C]の値を[E]へ抽出する([B]でグループ化) (3) 同様に、フィールド[A]の値を参照し、「333」の場合は、 フィールド[C]の値を[F]へ抽出する([B]でグループ化) (4) 新規クエリにて、上記課題(1)~(3)の条件を指定して実行すると 以下の抽出結果が表示される =========================================================== [抽出結果] (テーブル(2)) No [B] [D] [E] [F] 1 X あ か さ 2 Y た (Null) は 3 Z ら ま や =========================================================== 別々のレコードにあるフィールド[C]の値を、条件に従い テーブル(2)のように1つのレコードにまとめたいのです。 大変恐縮ですが、私はSQLが書けないので、フィールド欄へ関数式を 入力して条件を指定しております。 できましたら、各フィールドへ入力する関数式を教えていただけると助かります。 また、関数だけでは出来ない場合は、SQLで教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。
- KTN1123
- お礼率72% (44/61)
- その他MS Office製品
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
クロス集計クエリでいいのでは? フィールド__|[B]__|[A]__|[C] 行列の入れ替え|行見出し|列見出し|集計値 集計方法___|____|____|先頭or最後 クロス集計クエリ http://office.microsoft.com/ja-jp/access-help/HA010229577.aspx
その他の回答 (1)
- layy
- ベストアンサー率23% (292/1222)
(テーブル(1)) No [A] [B] [C] [D] [E] [F] 1 111 X あ 2 222 X か 3 333 X さ 4 111 Y た 5 222 Y (Null) 6 333 Y は 7 222 Z ま 8 333 Z や 9 111 Z ら を クロス集計クエリを使って、縦軸X,Y,Z、横軸111,222,333 中間テーブルA 111 222 333 X あ か さ Y た NULL は Z ら ま や を作ることができれば、 テーブル1と中間テーブルAとの組み合わせができるように思います。 中間テーブルA 111 222 333 X あ か さ Y た NULL は Z ら ま や Dへ Eへ Fへ ※実機テストはしていません。 参考になれば。
お礼
早々のご回答をくださり ありがとうございました。 クロス集計クエリを使えばいいのですね! お陰様で、希望通りの結果を得ることができ大変勉強になりました(*^_^*)
関連するQ&A
- 特定の値が入っているレコードを抽出する方法について
下記のテーブルがあったとして、 field2にグループAに該当する値と、グループBに該当する値が共に1つずつ入っている field1の値を抽出したいと思いました。 下記の場合ですと、その条件を満たす1, 3, 4, 6を抽出したいと思います。 グループA:1, 2, 3 グループB:101, 102, 103 ――――――――― |field1|field2 ――――――――― |1 |1 |1 |10 |1 |101 |2 |1 |2 |15 |2 |104 |3 |2 |3 |18 |3 |101 |4 |2 |4 |17 |4 |103 |5 |3 |5 |15 |5 |100 |6 |3 |6 |18 |6 |103 ――――――――― 使用バージョンは7.4.19です。 よろしくお願いします。
- ベストアンサー
- PostgreSQL
- アクセスの重複データ抽出について
アクセスで添付画像のようなテーブルがあり、重複データの抽出を行いたいです。 抽出結果は 1 50 4 1 -50 5 1 50 8 5 -70 19 5 70 1 となるようにしたいです。 つまり、 ・フィールド1が同じ 且つ フィールド2の絶対値が等しい ・ただしフィールド2が「0より大きいのみ」 または「0より小さいのみ」 の場合は抽出しない (プラスとマイナスの値が最低1つずつ含まれる) という条件です。 abs関数を使い、フィールド2の絶対値を出すのは出来たのですが、そこから先で行き詰っています。 どのように行えばよいか、お分かりの方お教え下さい。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- SQLでデータを1件だけ取得したいのですが。
SQLでデータを1件だけ取得したいのですが。 以下のようなテーブルが2つあるとします。 ------------------------------------ テーブルA テーブルB 値X 値X 値Y 1 1 20 2 2 NULL 3 2 60 4 2 70 4 NULL 4 NULL ------------------------------------ ここで、テーブルAの値Xと、テーブルBの値Xをリンクさせます。 テーブルAにデータがあれば、テーブルBに無くても出力します(外部結合イメージ) テーブルAの値Xに対して、テーブルBの値Xは2件以上リンクされる可能性があります。 この場合は1件のみ出力します。 その1件の決め方は、テーブルBの値YがNULLでは無く最大の物です。 但し値Yは全てNULLの可能性もあるので、その場合NULLとして1件出力します。 上記の出力イメージ ------------------------------------ 値X 値Y 1 20 (1件の場合そのまま出力。1件がNULLでもそのまま出力) 2 70 (NULLではない最大の1件を出力) 3 NULL (テーブルBになくても出力) 4 NULL (値が全てNULLの場合、NULLとして1件出力) ------------------------------------ どのようなSQLを記載すれば実現可能でしょうか?
- ベストアンサー
- Oracle
- SQLでの抽出条件
SQL初心者です。初歩的な質問だと思いますが、ご教授願います。 以下のような2つのテーブルがあります。 【テーブルA】 グループ 社員番号 A 1 A 2 A 3 B 4 B 5 B 6 C 7 C 8 D 9 D 1 【テーブルB】 社員番号 1 9 テーブルBの社員番号と一致する場合、テーブルAをグループ単位で抽出しないようにしたいです。 ・グループAは社員番号1が一致するため抽出しない。 ・グループDは社員番号1と9が一致するため抽出しない。 【取得結果】 グループ 社員番号 B 4 B 5 B 6 C 7 C 8 説明が分かりづらくて申し訳ありませんが、よろしくお願い致します。
- ベストアンサー
- SQL Server
- Accessでの抽出について
Accessで下記のようなテーブルがあるとします。 フィールド1 フィールド2 フィールド3 ----------------------- Aさん 20 200 Aさん 10 180 Bさん 10 300 Cさん 10 250 Cさん 30 310 条件1・・・フィールド2が「20」 条件2・・・フィールド3が「200」 この条件が当てはまる、フィールド1のデータはすべて抽出というふうにしたいのですが・・・。 (上記のテーブルでは、1件目と2件目のレコードがあてはまります。) どのようにして抽出したらよいでしょうか?よろしくお願いします。 Access2000を使用します。
- ベストアンサー
- その他(データベース)
- 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を表示 としました。希望した結果は得られましたが、 もっとスマートな方法(一つのクエリでできるような方法)、 または別解をご教授ください。 よろしくお願いします。
- ベストアンサー
- SQL Server
- 片方だけ抽出する方法(SQL)
下記のようなテーブルがあるとします。 Aテーブル コード 値 X 10 Y 20 Z 30 Bテーブル コード 値 Y 20 Y 30 Z 30 A.コード=B.コードとA.値=B.値という条件に一致しないデータのうち、 Aテーブルのデータのみ取り出したいです。 この場合だと、「X 10」のみ結果として欲しいです。 どのようなSQLを作成すればいいか、分かりません。 考え方の問題なのかもしれませんが、ぜひ教えてください。
- ベストアンサー
- Oracle
- accessの不一致抽出
accessで2つのテーブルで一致しないものを抽出しようとしてますが、抽出された数が合いません。 テーブルは下記のように2つあります テーブルA AAA ABA CCC DDC DDC テーブルB AAA ABB CCC DDC DDD これで AとBのテーブルをつなぎAのみに存在するものを抽出するのに Aを元テーブルで対象テーブルをBにして、 BのほうにIs Nullを入力して、不一致分だけ抽出して新しいテーブルを作成してます。 同じようにその逆で、Bにのみ存在しているものを抽出してテーブルを作成しました。 最後に、同じようにAとBをリレーで繋ぎ、リレーのプロパティの「1」で、AとBで一致するものだけを抽出してテーブルを作成しました。 Aのみに存在(テーブルA') Bのみに存在(テーブルB') 両方に存在 (テーブルC) そこでテーブルC-テーブルA’の数と、テーブルC-テーブルB'の数を比較して、同じになると思ったんですが、数が異なってしまいました。 おそらく値の「DDC」の所の抽出が問題だと思い、 プロパティで「固有の値」を「はい」にしてみましたが変わりませんでした。 不一致で抜き出したいのは、「DDC」が、テーブルAには2つ、 テーブルBには1つ値があるので、テーブルB’に1つだけ不一致を抽出できればベストなんですが。 access初心者な為、根本的にやり方や考え方が間違っているかもしてませんし、状況説明も下手ですみません。 どなたかご教授いただければと思っております。
- 締切済み
- オープンソース
- 副問合せを使った複雑なUPDATE
はじめまして テーブルAとBがあります テーブルAをUPDATEする時にBのフィールドの値を使うのはわかるのですが UPDATE A SET A.フィールド = (SELECT B.フィールド FROM B WHERE Bの条件) ここで、B.フィールドの値が'X'なら、そのまま代入。違う場合は'Y'を入れるような場合、1回のSQLで出来るでしょうか? 出来るのであれば、どのようなSQLか御教授願います。よろしくお願いします。
- ベストアンサー
- Oracle
- Accessで2つのテーブルのデータの整合性を確認したい
Accessで2つのテーブルのデータの整合性を確認したいのですが、よい方法を教えていただけませんか? 状況は以下のとおりです。 Aテーブル a b c d e 1 111 222 333 444 555 2 666 777 888 999 100 3 110 112 113 114 115 Bテーブル a b c d e 1 111 222 333 444 555 2 666 777 000 999 100 3 110 112 300 400 500 ・AテーブルとBテーブルがあり、それぞれのテーブルのa、b、dフィールドのみを対象に、その値がAテーブルとBテーブルとで等しいかどうか調べたい。 (c、eフィールドの値が異なっていても、a、b、dフィールドの値が同じであればそのレコードはOKとし、a、b、dフィールドで1つでも異なる値があればNGとし、抽出したい。 例えば、Bテーブルの1、2レコードはOKだが、3レコードはNG) ・それぞれのテーブルのaフィールドが主キーになっている。 うまく説明できず、わかりにくいかもしれませんが、よろしくお願いします。
- 締切済み
- オフィス系ソフト
お礼
早々のご回答をくださり ありがとうございました。 クロス集計クエリを使うという手がありましたね! お陰様で大変勉強になりました(*^_^*)