• ベストアンサー

ACCESS フィールドをまとめたい

ACCESS2007で同じレコードにある複数のフィールドを   レコード1:番号A  名前A  番号B  名前C  番号C  名前C   レコード2:番号A  名前A  番号B  名前C  番号C  名前C こんな感じに、新規のテーブルやクエリーで「番号」と「名前」にまとめたいのですが      レコード1:番号A 名前A   レコード2:番号B 名前B   レコード3:番号C 名前C   レコード4:番号A 名前A   レコード5:番号B 名前B   レコード6:番号C 名前C    お手数ですがご教示ください。  よろしくお願いいたします。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

すみません、長文になってしまいましたが・・・(汗) ※以下、「レコード1:」などの文字列は説明のためのもので、   テーブル/クエリ上では表示不要と判断しての回答です。 > 新規のテーブルやクエリーで「番号」と「名前」にまとめたい 【クエリの場合】 「ユニオンクエリ」というものを使用します。 (このクエリは、一般的な選択クエリや追加クエリなどのようにデザインビューで 作成することはできないので、若干敷居が高くなってしまいますが(汗)) 1)『作成』リボンの『その他』グループの『クエリデザイン』ボタンをクリック 2)『テーブルの表示』ダイアログでは何も選択せずに『閉じる』をクリック 3)『デザイン』タブの『結果』グループ(左端)の『SQL表示』ボタンをクリック 4)「SELECT;」という文字列が表示されているのを削除して、以下のような  文字列(SQL文)を記述: Select 番号A As 番号, 名前A As 名前 From テーブルA Union Select 番号B As 番号, 名前B As 名前 From テーブルA Union Select 番号C As 番号, 名前C As 名前 From テーブルA ; ※元のテーブル名を「テーブルA」と仮定していますので、実際のテーブル名   に置き換えてください。 ※このクエリを保存して閉じた後、再びSQL文を表示させると、「Union」の   後の改行が消えて、「Union Select ~」となりますが、そのままでOkです。 ※「 As 番号」は、その前に指定したフィールドを「番号」というフィールド名で   表示させるためのものです。   なお、2つ目以降の「Select」の後の「 As ~」は、本来は指定しても無効   ですが、上記のSQL文が「通常の選択クエリのSQL(Select ~ From ~)」   と「Union」とから構成されているのをわかりやすくするため、意図的に入れて   います。 ※上記のSQL文では、「番号と名前の組み合わせが同一のもの」は、1つの   レコードに集約されます。集約したくない場合は、以下に差し替えて下さい: Select 番号A As 番号, 名前A As 名前 From テーブルA Union All Select 番号B As 番号, 名前B As 名前 From テーブルA Union All Select 番号C As 番号, 名前C As 名前 From テーブルA ; 5)クエリを保存して閉じる 【テーブルの場合】 上記ユニオンクエリに抵抗がなければ、それを元にして、テーブル作成クエリ (又は追加クエリ)を作成してやればOkです。 (クエリの新規作成時に、『テーブルの追加』ダイアログで『クエリ』タブを選択  して、当該ユニオンクエリを追加) SQL文がとっつきにくいということであれば、『番号』と『名前』の2つのフィールド を持つ新規テーブルを作成した上で、「番号A, 名前A」「番号B, 名前B」 「番号C, 名前C」のデータをそのテーブルに追加する追加クエリ(計3個)を 作成して、それらを実行する形になります。 <参考> マクロでクエリを実行する場合は、『クエリを開く』アクションでクエリを実行 する前に『メッセージの設定』アクションを追加し、『メッセージの表示』欄に 「いいえ」を指定すると、追加確認メッセージを非表示にできます。 ※『メッセージの設定』アクションは、マクロをデザインビューで開いた状態で   『デザイン』リボンの『表示/非表示』グループにある『すべてのアクションを   表示』ボタンをオンにしていないと表示されないので、注意してください。 マクロではなくVBAの場合は、  DoCmd.SetWarnings False をクエリ実行前に入れてやればOkです。 なお、VBAでは、上記の実行後は新規クエリの保存時などに表示される 「保存しますか」といったメッセージまで表示されなくなるので、クエリの実行 後に必ず  DoCmd.SetWarnings True を入れて、メッセージの表示設定を元に戻してやる必要があります。 (マクロの場合は、一連の処理が終了すると、自動で元の設定に戻ります) ・・・長くなりましたが(汗)、以上です。

yun_n
質問者

お礼

ご回答ありがとうございました。 とても参考になりました。

その他の回答 (1)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

>  レコード1:番号A  名前A  番号B  名前C  番号C  名前C >  レコード2:番号A  名前A  番号B  名前C  番号C  名前C 提示のあった上記のフィールド名を以下と仮定します。 フィールド名  F1    F2    F3    F4    F5    F6   レコード1:番号A  名前A  番号B  名前C  番号C  名前C   レコード2:番号A  名前A  番号B  名前C  番号C  名前C クエリのSQLビューに以下を記述します。 SELECT F1 AS 番号, F2 AS 名前 FROM テーブル名 UNION ALL SELECT F3 AS 番号, F4 AS 名前 FROM テーブル名 UNION ALL SELECT F5 AS 番号, F6 AS 名前 FROM テーブル名; 結果は、提示のあった「こんな感じ」の順にはなりません。 また、レコード2,5の 「番号B」「名前B」の組合せは出てきません。 以下の様に記述すると、結果を 新テーブル名 で作成します。 SELECT * INTO 新テーブル名 FROM (SELECT F1 AS 番号, F2 AS 名前 FROM テーブル名 UNION ALL SELECT F3 AS 番号, F4 AS 名前 FROM テーブル名 UNION ALL SELECT F5 AS 番号, F6 AS 名前 FROM テーブル名);

yun_n
質問者

お礼

ご回答ありがとうございました。 とても参考になりました。

関連するQ&A