Access Tips by pPoy

  
トップへ←Top    QueryへQuery  FormへForm  ReportへReport  Module(Sub)へSub  Module(Function)へFunction  ExcelへExcel  Etc.へEtc.  Word連携へWord

Query 良く似た構造のテーブル・クエリを一つにまとめて表示するクエリ
《ユニオンクエリ》(Ac97,Ac2000,Ac2002)
テーブル構造が微妙に違っているデータを同時に処理したい場合があります。
新規にテーブルを作っても良いですが、一時だけの処理やデータが都度変わる場合は
ユニオンクエリが便利です。

ユニオンクエリを作る場合は、元となるデータ構造を同じにする工夫が必要です。
必ずしも、フィールド名は同一である必要はありません。

但し、出力されるフィールドの順番とフィールド数は同一であることが条件です。
順番がバラバラでは、表示されたときに意味不明のデータとなってしまいます。
また、フィールド数が合わないとエラーとなります。

フィールド数を合わせる為、元々該当フィールドの無いテーブルの分は
クエリ内で作成します。 そのとき、フィールド名も変更することが出来ます。
元データ1

「TD_成績2003」 は、集計データの
格納されているデータテーブルです。

テーブルには全部で11件のデータが
あります。

「国語」 ・ 「数学」 ・ 「英語」 の
点数があります。
元データ2 良く似た構造の 「TD_成績2003_a」
というテーブルがあります。

こちらには10件のデータがあります。

「国語」 ・ 「理科」 ・ 「英語」 の
点数があります。

この2つのテーブルの中から、
「国語」 ・ 「数学」 ・ 「英語」 ・ 「理科」
を取り出して表示ます。

お互いのテーブルに無いフィールドは
名称を作り、0 データとして作成します。

この頁のTOPへTop

ユニオンクエリは、クエリグリッドからは作成できません。
面倒でも直接 SQL ビューで 入力する必要があります。

まず、新規に空のクエリを作成します。
クエリのデザイン画面を開いて、テーブルを追加せずに閉じます。
その状態で、ツールバーの  「SQL ビュー」 を押してください。

そこには、「SELECT;」 の文字が表示されています。 最後のセミコロンを消し、
以下の文を入力してください。
  SELECT 番号,性別,国語,0 as 数学,英語,理科,"理" as コース
  from TD_成績2003_a
  UNION select NOA,性別,国語,数学,英語,0 as 理科,"数" as コース 
  from TD_成績2003;
SQL ビュー

≪文の意味≫

  • データ構造をそろえる為、他方に無いフィールドは、0 として作成します。
      例: 0 as 数学

  • 値を 「0」 としたのは、後に 「数値」 として集計する可能性がある為です。
    集計する必要が無ければ、"" でも大丈夫です。
    但しその場合、そのフィールドのデータは全て 「文字」 として扱われます。

  • 出所 (テーブル名) を区別するために、新規にフィールドを作成します。
      例: "理" as コース 

  • 存在しないフィールドの値を 「0」 に設定した場合、平均値を出すときには注意が必要です。
    出所で区別する必要があります。
Access では大文字小文字に意味はありません。 
また改行位置は単語の前後ならどこでもOKです。 但し、上下に並んでいた方が見やすいです。
そのままツールバーの 「」 (実行) ボタンを押して実行してみてください。

実行結果

無事に両方のテーブルのデータが
表示されます。
同時にテーブルに無いフィールドと
データが追加されています。

両方のテーブルがまとまった結果、
全部で21件のデータが表示されています。

このときフィールド名には、最初に記述された
テーブルのものが使用されます。

つまり、「TD_成績2003」 用の記述の
「0 as 理科,"数" as コース」は、
「0, "数"」 のみでもOKです。
今回は意味が解るようにつけてあります。
≪注意≫
  • ユニオンクエリはそれなりのマシンスペックを必要とします。
    非力なマシンでユニオンクエリを複数組み合わせると、処理が非常に遅くなります。
    そのような場合は、ワークテーブルを利用したほうが処理が速いです。

  • ユニオンクエリでは、特に指定しない場合、重複したデータは排除されます。
    両方のテーブルの全てのデータを表示したい場合は、以下のように記述します。
      SELECT 番号,性別,国語,0 as 数学,英語,理科,"理" as コース
      from TD_成績2003_a
      UNION ALL select NOA,性別,国語,数学,英語,0 as 理科,"数" as コース 
      from TD_成績2003;
    ALL 述語を入れることによって、重複分を含めて全てのデータが返されます。
    また、 ALL を入れた方がクエリの実行速度が速くなります。

  • 同じ構造のテーブルをまとめて表示する方法 (ユニオンクエリ) は、 こちら です。




この頁のTOPへTop

【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

☆ 感想をお知らせください (直接ブラウザから送信致します。メールアカウントは不要です。)
  form mail はこちら

Copyright(C) pPoy 2004