- 締切済み
Accessで一致データを抜いて項目をずらす方法
Access2000を使用して、テーブル1のフィールド2~5で、テーブル2と一致したフィールドを抜いて項目をシフトさせたいのですが、どのような方法があるのでしょうか。 <元テーブル> フィールド→ 氏名, 名1, 名2, 名3, 名4 ・テーブル1の項目 山田,花子,次郎,三郎,四郎 鈴木,五郎,六郎,七朗,和子 佐藤,和子,一郎,太郎,四郎 ・テーブル2の項目 山田,花子 鈴木,七朗 鈴木,和子 佐藤,一郎 佐藤,四郎 佐藤,和子 <変換後テーブル>テーブル1を基準として フィールド→ 氏名, 名1, 名2, 名3, 名4 山田,次郎,三郎,四郎,null 鈴木,五郎,六郎,null,null 佐藤,太郎,null,null,null 分りずらい説明で申し訳ありませんが、宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- CHRONOS_0
- ベストアンサー率54% (457/838)
>希望する変換が行える処理が分らないので投稿しています。 処理できる形に変換すると考えればいいのでは ユニオンクエリで処理できる形に組み替えられます 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)
>つまり、項目1が氏名、項目2が名1、項目3が名2、項目4が名4、を表現していることになります。 まさに、これがデータベースのテーブルの作り方の原則に反しているのです 家族のテーブルなんでしょうか? 少なくとも 姓 名 ---------- 山田 花子 山田 次郎 山田 三郎 山田 四郎 鈴木 五郎 鈴木 六郎 鈴木 七朗 鈴木 和子 のようなテーブルでないと駄目です 本来なら 「社員テーブル](社員ID 、社員名、・・・) 「家族テーブル](社員ID、家族No、家族名) とでもするところでしょうね この辺データベースの重要な基本です どの入門書にも前半の部分に書いてあるテーブルの作り方、正規化などというところをよく勉強してください
- CHRONOS_0
- ベストアンサー率54% (457/838)
テーブル1はデータベースのテーブルの原則を外していますから データベース的手法では処理できません やるとすれば一度テーブル2のようなテーブルにユニオンクエリで組み替えてから 重複を除き、クロス集計クエリで欲しい結果を出すようにすることになりますが その場合も並べる順序を決定するフィールドが必要ですね このままじゃ次々と問題が生じます テーブルの作り方、正規化などについて勉強された方がいいと思いますよ
補足
作業内容の表現とデータの表現が悪かったのですが、,(カンマ)はデータ区切記号として表現しております。実際にテーブルにある場合は、フィールド1~5の5項目に分かれています。 つまり、項目1が氏名、項目2が名1、項目3が名2、項目4が名4、を表現していることになります。 もともとテーブル1が存在している状態で、引抜としてテーブル2のデータがきた場合に、重複を取り除くだけでなく、例えば項目2が重複しているのであれば、項目3を項目2にシフトさせると言った形の変換後テーブル(引抜後テーブル)を発生させたいのですが、どうすれば宜しいでしょうか。
補足
まさしく、その通りなのです。従来の方法であれば、投稿しなくても処理する方法は分るのです。 ただ、問題はこちらで作成したテーブルではないので、このテーブルを生かしつつ、希望する変換が行える処理が分らないので投稿しています。 何か方法は無いのでしょうか。 どなたか、いい方法を思いつく方いらっしゃいませんでしょうか。