人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

マイクロソフトアクセスで下記のように2つのテーブルを統合する方法を教えて頂けますでしょうか。

テーブル1
ID名称住所
1Aホテル東京
2Bホテル大阪
3Cホテル名古屋

テーブル2
ID設備タイプ設備名
1ホテル設備ベビーシッター
1ホテル設備レストラン
1レジャー設備マッサージ
1レジャー設備フィットネス
1部屋設備エアコン
1部屋設備バルコニー
2レジャー設備フィットネス
2レジャー設備スイミング
2部屋設備エアコン
2部屋設備ドライヤー
3ホテル設備レストラン
3ホテル設備ランドリー
3部屋設備エアコン
3部屋設備バルコニー

テーブル統合後
ID名称住所ホテル設備ホテル設備レジャー設備レジャー設備部屋設備部屋設備
1Bホテル東京ベビーシッターレストランマッサージフィットネスエアコンバルコニー
2Bホテル大阪フィットネススイミングエアコンドライヤー
3Cホテル名古屋レストランランドリーエアコンバルコニー


データ数は合計3万件以上、ソフトはアクセス2003を使用しています。

●質問者: kgfjfdhgyf
●カテゴリ:コンピュータ インターネット
✍キーワード:アクセス エアコン スイミング ソフト タイプ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● kn1967
●60ポイント

ステップ1)設備タイプ毎に仮の通し番号を付けるためのクエリを造る

クエリA

SELECT DCOUNT("*","ホテル設備","ID=" & ID & " AND 設備タイプ=""" & 設備タイプ & """ AND 設備名<""" & 設備名 & """")+1 AS 通し番号, *
FROM テーブル2;

実行結果

通し番号 ID 設備タイプ 設備名
1 1 ホテル設備 ベビーシッター
2 1 ホテル設備 レストラン
2 1 レジャー設備 マッサージ
1 1 レジャー設備 フィットネス
1 1 部屋設備 エアコン
2 1 部屋設備 バルコニー
2 2 レジャー設備 フィットネス
1 2 レジャー設備 スイミング
1 2 部屋設備 エアコン
2 2 部屋設備 ドライヤー
2 3 ホテル設備 レストラン
1 3 ホテル設備 ランドリー
1 3 部屋設備 エアコン
2 3 部屋設備 バルコニー

ステップ2)設備タイプ毎に何列ずつ必要になるかを調べる

上記例では

ホテル設備は1つのホテルで最大2つ

レジャー設備も1つのホテルで最大2つ

部屋設備も1つのホテルで最大2つ

ここでは偶然にも2つずつとなりましたね。

ステップ3)統合用クエリを造る

クエリB

SELECT ID,名称
 ,DLookup("設備名","クエリA","ID=" & ID & " AND 設備タイプ=""ホテル設備"" AND 通し番号=1") AS ホテル設備1
 ,DLookup("設備名","クエリA","ID=" & ID & " AND 設備タイプ=""ホテル設備"" AND 通し番号=2") AS ホテル設備2
 ,DLookup("設備名","クエリA","ID=" & ID & " AND 設備タイプ=""レジャー設備"" AND 通し番号=1") AS レジャー設備1
 ,DLookup("設備名","クエリA","ID=" & ID & " AND 設備タイプ=""レジャー設備"" AND 通し番号=2") AS レジャー設備2
 ,DLookup("設備名","クエリA","ID=" & ID & " AND 設備タイプ=""部屋設備"" AND 通し番号=1") AS 部屋設備1
 ,DLookup("設備名","クエリA","ID=" & ID & " AND 設備タイプ=""部屋設備"" AND 通し番号=2") AS 部屋設備2
FROM テーブル1

実行結果

ID 名称 ホテル設備1 ホテル設備2 レジャー設備1 レジャー設備2 部屋設備1 部屋設備2
1 Aホテル ベビーシッター レストラン フィットネス マッサージ エアコン バルコニー
2 Bホテル スイミング フィットネス エアコン ドライヤー
3 Cホテル ランドリー レストラン エアコン バルコニー

補足1)動作テストについて

Access2000で作成しましたので以降のAccessならば使えるはずですが

3万件のデータを作成してテストしたわけでもありませんので悪しからずご了承ください。

(処理が遅いようであればクエリA、クエリB共に

WHERE句でIDを範囲指定するなどの処置を施していただければと思います)

補足2)並び順について

データベースの場合、明確な並び順がありませんので今回の場合は

アイウエオ順になっておりますが、どうしても例えばスイミング→フィットネスではなく

フィットネス→スイミングにしたいということであれば

その並び順を示すようなテーブルを新規作成して上記クエリAを適宜改良してください。

補足3)完全自動化について

ステップ2の部分をVBAにて補うようにすれば完全自動化も可能ですが

そこまでするのであればテーブル1のデザインを

ID 名称 住所 ベビーシッター レストラン フィットネス マッサージ エアコン バルコニー

といったような形に変えてしまう事をお勧めします。


関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ