- 締切済み
Accessでテーブルの文字列フィールドを連結する
次のようなフィールドが2列のデータがあります。 1:りんご 1:みかん 1:バナナ 2:みかん 2:ぶどう 3:りんご 3:バナナ それを 1:りんご、みかん、バナナ 2:みかん、ぶどう 3:りんご、バナナ とクエリーでまとめたいのですが どのようにしたらよろしいでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- arare2005
- ベストアンサー率31% (63/199)
--DB1-- 1:りんご 1:みかん 1:バナナ 2:みかん 2:ぶどう 3:りんご 3:バナナ --DB2-- 1:りんご、みかん、バナナ 2:みかん、ぶどう 3:りんご、バナナ (1)DB1の入力フォームでDB2を作成する (2)DB1に連番を与え、連番は10までとする DB1…1-1、1-2、1-3...、1-10 DB2…1の分類(KEY):1-1、1-2、1-3...、1-10 なければNULL ※項目=10個 (3)DB2をVBAで随時更新する (4)件数が少なければ、とりあえず手作業で作っちゃう(^^; ※実際にどの様な構成で運用しているのかがわからないので、どれも微妙な感じですネ!(^^; でも効率を考えれば、DB2をどうにかして作成するのが良いと思います。 これを機会に少しだけVBAで組んじゃいましょう(^^)
- goooood_job
- ベストアンサー率20% (1/5)
SQLだけでは難しいですね。 パフォーマンスは保証できませんが、オリジナル関数を作るしかないでしょう。 FruitTBL ID FName 1 りんご 1 みかん 1 バナナ 2 みかん 2 ぶどう 3 りんご 3 バナナ とすると、 標準モジュールに Option Compare Database Option Explicit Public Function GetNames(lngID As Long, strDel As String) As String Dim rs As New ADODB.Recordset Dim strSQL As String Dim strRet As String strSQL = "SELECT FName FROM FruitTBL WHERE ID = " & CStr(lngID) rs.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic strRet = "" Do Until rs.EOF strRet = strRet & rs.Fields(0).Value & strDel rs.MoveNext Loop strRet = Left(strRet, Len(strRet) - Len(strDel)) rs.Close Set rs = Nothing GetNames = strRet End Function クエリーで SELECT ID, GetNames(ID,",") AS Name FROM FruitTBL GROUP BY ID こんなのでいかがでしょうか? 意味があるかは分かりませんが、テーブル名などもパラメータに 出来なくもないので工夫してください。 バージョンが分からなかったので適当ですが…。