一気にやろうと思ったら、確かに UNION 等でてきます。
初心者といえども、簡単にやりたいんですよね。
※ 以下を確かめられる時は、テスト用の環境で行ってください。
まず、考え方から
「商品1」について考えてみます。
・数量 テーブル のテーブル名を「T数量」
・単価 テーブル のテーブル名を「T単価」
・結合 テーブル のテーブル名を「T結合」
とします。
クエリのSQLビューに以下を記述します。
SELECT Q1.機器, Q1.商品, Q1.数量, Q2.単価 FROM
(SELECT 機器, 1 AS 商品, 商品1 AS 数量 FROM T数量) AS Q1 INNER JOIN
(SELECT 機器, 1 AS 商品, 商品1 AS 単価 FROM T単価) AS Q2 ON Q1.機器=Q2.機器 AND Q1.商品 = Q2.商品;
この状態で表示を確認してみます。
「商品2」も表示したい、となったら
SELECT Q1.機器, Q1.商品, Q1.数量, Q2.単価 FROM
(SELECT 機器, 1 AS 商品, 商品1 AS 数量 FROM T数量) AS Q1 INNER JOIN
(SELECT 機器, 1 AS 商品, 商品1 AS 単価 FROM T単価) AS Q2 ON Q1.機器=Q2.機器 AND Q1.商品 = Q2.商品
UNION ALL
SELECT Q1.機器, Q1.商品, Q1.数量, Q2.単価 FROM
(SELECT 機器, 2 AS 商品, 商品2 AS 数量 FROM T数量) AS Q1 INNER JOIN
(SELECT 機器, 2 AS 商品, 商品2 AS 単価 FROM T単価) AS Q2 ON Q1.機器=Q2.機器 AND Q1.商品 = Q2.商品;
の様に UNION ALL で必要分記述していきます。
(";" は一番最後にあれば良いので、UNION ALL 前の ";" は削除します)
「商品100」まで表示したい、となったら
100 AS 商品, 商品100 AS 数量
100 AS 商品, 商品100 AS 単価
になるまで、数字を変更しながら同じようにドンドン追加していきます。
後はそれを、テーブル作成クエリに変更すればテーブルは出来上がります。
これ手作業でやっていきますが、面倒くさい・・・と思ったら VBA に挑戦してみます。
以下を標準モジュールに記述し実行すれば、テーブル「T結合」が出来上がります。
Public Sub TableMake()
Dim sSqlBase(1) As String
Dim iPhase As Integer
Dim sSql As String
Dim i As Long
sSqlBase(0) = "SELECT Q1.機器, Q1.商品, Q1.数量, Q2.単価 INTO T結合 FROM " _
& "(SELECT 機器, {%1} AS 商品, 商品{%1} AS 数量 FROM T数量) AS Q1 INNER JOIN " _
& "(SELECT 機器, {%1} AS 商品, 商品{%1} AS 単価 FROM T単価) AS Q2 ON Q1.機器=Q2.機器 AND Q1.商品 = Q2.商品;"
sSqlBase(1) = "INSERT INTO T結合(機器, 商品, 数量, 単価) " _
& "SELECT Q1.機器, Q1.商品, Q1.数量, Q2.単価 FROM " _
& "(SELECT 機器, {%1} AS 商品, 商品{%1} AS 数量 FROM T数量) AS Q1 INNER JOIN " _
& "(SELECT 機器, {%1} AS 商品, 商品{%1} AS 単価 FROM T単価) AS Q2 ON Q1.機器=Q2.機器 AND Q1.商品 = Q2.商品;"
On Error Resume Next
DoCmd.DeleteObject acTable, "T結合"
On Error GoTo 0
iPhase = 0
For i = 1 To 100
sSql = Replace(sSqlBase(iPhase), "{%1}", i)
CurrentDb.Execute sSql
iPhase = 1
Next
RefreshDatabaseWindow
End Sub
商品1つの基本となるSQL文を、テーブル作成用、追加用の2種類用意しておきます。
1 ~ 100 の数字が変わる部分は、置換えしやすいような文字列にしておきます。
( 上記の例では {%1} を )
「T結合」テーブルがあったら削除してから、
・商品1 の時は、テーブル作成
・商品2 以降は、追加
処理が終わったら、データベースウィンドウの再表示
「T結合」が既にあって、内容を変更するだけ・・・なら、記述は変わってきます。
※ 転記、確認される場合があれば、教えてgoo ではない提携サイトから
コピー&貼り付けしてください。
(現在の教えてgoo では、不要な半角スペースが行頭に付加されるようです)