• ベストアンサー

Access 1つのフィールド値ごとに、レコード結果を取得したい

XP-pro、Access 2003 どう書いてよいかわからず、タイトルが曖昧ですいません。 SQLについて質問させてください。 以下のtestテーブルがあるのですが、 id | name | data1 | data2 ============== 1 | tanaka | 11 | 22 2 | hayama | 33 | 44 これを整形して次のようなデータを取得したいのです。 id | name | count ========== 1 | tanaka | 11 1 | tanaka | 22 2 | hayama | 33 2 | hayama | 44 上手い方法が思いつかず、現在は select id, name, data1 from test UNION select id, name, data2 from test; という方法を取っています。 ただ、この方法ですとdataというフィールドの数が増えれば増えただけUNIONを書き足す必要があるのでメンテナンスが面倒ですし、処理が重くなる気もします。 こういうデータの取得方法で、何が良い方法がありますでしょうか。 過去ログなどで、こういう項目で探してみると良いみたいなのでも結構ですので、よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

SQLでは難しいならば、モジュールでVBA処理(レコード処理)しては テーブル5 ID 氏名 フィールド2 フィールド3 フィールド4 フィールド5 1 田中 12 13 14 2 鈴木 22 25 27 29 3 橋本 13 18 4 福田 45 47 49 手じかにDAOの例があったが、ADOなどで例をWEBで調べてください。 Sub test05() Dim db As DAO.Database Dim rs As DAO.Recordset Dim mrs As DAO.Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("テーブル5", dbOpenDynaset) Set mrs = db.OpenRecordset("テーブル6", dbOpenDynaset) Do Until rs.EOF For i = 2 To rs.Fields.Count - 1 If Nz(rs.Fields(i)) <> "" Then '-- mrs.AddNew mrs.Fields("氏名") = rs.Fields(1) mrs.Fields("計数") = rs.Fields(i) mrs.Update End If '-- Next i rs.MoveNext Loop rs.Close: Set rs = Nothing mrs.Close: Set mrs = Nothing db.Close: Set db = Nothing End Sub 実行後 テーブル6 ID 氏名 計数 82 田中 12 83 田中 13 84 田中 14 85 鈴木 22 86 鈴木 25 87 鈴木 27 88 鈴木 29 89 橋本 13 90 橋本 18 91 福田 45 92 福田 47 93 福田 49

tom7net
質問者

お礼

確かに今書いている煩雑なSQLと比べますと、メンテナンスはとても楽になりそうです。 参考にさせていただきます。

その他の回答 (3)

  • keirika
  • ベストアンサー率42% (279/658)
回答No.4

NO3です。 勘違いしました。すみません。

tom7net
質問者

お礼

いえいえ、ご回答ありがとうございます。

  • keirika
  • ベストアンサー率42% (279/658)
回答No.3

SELECT id,name,data1 as count FROM test UNION ALL SELECT id,name,data2 as count FROM test; でどうでしょう。

noname#140971
noname#140971
回答No.1

tab1: [ID]_[name] __1___tanaka __2___hayama tab2: [ID]_[tab1_ID]_[Kubun]_[Data] __1_________1_______1_____11 __2_________1_______2_____22 __3_________2_______1_____33 __4_________2_______2_____44 テーブル設計をこのように変更すべきかなーと思いますね。 でなきゃー、質問者の悩みは払拭できないでしょう。

tom7net
質問者

お礼

そうですね、本来はテーブル構造を変更するのが一番なのですが。 ご意見ありがとうございます。

関連するQ&A