• 締切済み

Accessで一致データを抜いて項目をずらす方法

Access2000を使用して、テーブル1のフィールド2~5で、テーブル2と一致したフィールドを抜いて項目をシフトさせたいのですが、どのような方法があるのでしょうか。 <元テーブル>    フィールド→ 氏名, 名1, 名2, 名3, 名4 ・テーブル1の項目 山田,花子,次郎,三郎,四郎           鈴木,五郎,六郎,七朗,和子           佐藤,和子,一郎,太郎,四郎 ・テーブル2の項目 山田,花子           鈴木,七朗           鈴木,和子          佐藤,一郎           佐藤,四郎           佐藤,和子 <変換後テーブル>テーブル1を基準として   フィールド→ 氏名, 名1, 名2, 名3, 名4           山田,次郎,三郎,四郎,null           鈴木,五郎,六郎,null,null           佐藤,太郎,null,null,null 分りずらい説明で申し訳ありませんが、宜しくお願いします。

みんなの回答

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

>希望する変換が行える処理が分らないので投稿しています。 処理できる形に変換すると考えればいいのでは ユニオンクエリで処理できる形に組み替えられます select 氏名,名1,1 as 順序 from テーブル1 union all select 氏名,名2,2 as 順序 from テーブル1 union all select 氏名,名3,3 as 順序 from テーブル1 union all select 氏名,名4,4 as 順序 from テーブル1 あとは分かるんですよね

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

>つまり、項目1が氏名、項目2が名1、項目3が名2、項目4が名4、を表現していることになります。 まさに、これがデータベースのテーブルの作り方の原則に反しているのです 家族のテーブルなんでしょうか? 少なくとも 姓  名 ---------- 山田 花子 山田 次郎 山田 三郎 山田 四郎 鈴木 五郎 鈴木 六郎 鈴木 七朗 鈴木 和子 のようなテーブルでないと駄目です 本来なら 「社員テーブル](社員ID 、社員名、・・・) 「家族テーブル](社員ID、家族No、家族名) とでもするところでしょうね この辺データベースの重要な基本です どの入門書にも前半の部分に書いてあるテーブルの作り方、正規化などというところをよく勉強してください

yu-suzu
質問者

補足

まさしく、その通りなのです。従来の方法であれば、投稿しなくても処理する方法は分るのです。 ただ、問題はこちらで作成したテーブルではないので、このテーブルを生かしつつ、希望する変換が行える処理が分らないので投稿しています。 何か方法は無いのでしょうか。 どなたか、いい方法を思いつく方いらっしゃいませんでしょうか。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

テーブル1はデータベースのテーブルの原則を外していますから データベース的手法では処理できません やるとすれば一度テーブル2のようなテーブルにユニオンクエリで組み替えてから 重複を除き、クロス集計クエリで欲しい結果を出すようにすることになりますが その場合も並べる順序を決定するフィールドが必要ですね このままじゃ次々と問題が生じます テーブルの作り方、正規化などについて勉強された方がいいと思いますよ

yu-suzu
質問者

補足

作業内容の表現とデータの表現が悪かったのですが、,(カンマ)はデータ区切記号として表現しております。実際にテーブルにある場合は、フィールド1~5の5項目に分かれています。 つまり、項目1が氏名、項目2が名1、項目3が名2、項目4が名4、を表現していることになります。 もともとテーブル1が存在している状態で、引抜としてテーブル2のデータがきた場合に、重複を取り除くだけでなく、例えば項目2が重複しているのであれば、項目3を項目2にシフトさせると言った形の変換後テーブル(引抜後テーブル)を発生させたいのですが、どうすれば宜しいでしょうか。

関連するQ&A

専門家に質問してみよう