- ベストアンサー
アクセスで複数のレコード情報を1レコードにまとめる方法
アクセスにおいて 例えば以下のような1~6までのレコードを 1.Aさん,犬 2.Aさん,猫 3.Bさん,犬 4.Bさん,鳥 5.Bさん,豚 6.cさん,牛 ↓ 1.A,犬,猫 2.B,犬,鳥,豚 3.C,牛 このように、この場合だったら、~さんを軸に、 ひとつのレコードとしてまとめることは可能でしょうか。 仕事で使いたいのですが、やり方がわからず非常に困っています。 お手数ですがご教示いただけると幸いです。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
通常のクエリーだけでは無理です このテーブルをTBL(名前,ペット)とすると モジュールに Public Function PetNameAdd(pName) As String Dim iRS As Recordset Dim strSQL As String Dim strRet As String strRet = "" strSQL = "SELECT ペット FROM TBL WHERE 名前 = '" & pName & "'" Set iRS = CurrentDb.OpenRecordset(strSQL) While iRS.EOF = False If strRet = "" Then strRet = iRS(0) Else strRet = strRet & "," & iRS(0) End If iRS.MoveNext Wend iRS.Close Set iRS = Nothing PetNameAdd = strRet End Function を登録しておいてクエリーで SELECT 名前, PetNameAdd(名前) AS 全ペット FROM (SELECT DISTINCT 名前 FROM TBL) と書けば近いものは出来ます しかしながらクエリーは頻繁に関数を呼び出すのであまりお勧めは出来ません 一度、全ペット用のテーブルをこの関数を利用して作り、後の操作をする方がマシンに対する負荷は少ないです
その他の回答 (1)
- Pakkun10
- ベストアンサー率44% (22/50)
一つのレコードとしてまとめるにあたって、たとえばVBAを使用しレコードセットを開いて 無理矢理1レコードに収めるということでしょうか? それとも、クエリやSQLを使って表示したいということでしょうか? 前者であれば可能ですが、前者を希望ならすでにやってるような気がします。 後者を希望であれば難しい(というか無理)だと思います。 上の例で言うと、一つのフィールドに「犬,鳥,豚」と格納するのか、 それぞれを別のフィールドに分けるのかという問題も出てきます。 そのあたりをもう少しまとめてみるとわかりやすいです。 なお、もしも「データが『犬,鳥,豚,猫,牛』の5種類しかない」というようにある程度枠が決まっているのであれば無理矢理出来ないこともなさそうですが・・・。
お礼
Pakkun10様 さっそくご回答いただきありがとうございます。 クエリを使って、表示しようとしていました。。 無理そうですね。。。 例であげたものに補足すると、 「犬」「鳥」「豚」は別々のフィールドにします。 データの種類は、30以上あります。 しかしながら、考え方を変えたほうがよさそうですね。 ほかの方法で必要なデータ処理ができないかも考えてみます。 まずは、御礼申し上げます。ありがとございました。
お礼
noah7150様 さっそくのご回答ありがとうございます。 通常のクエリでは無理なんですね。。 アクセス初心者で通常のクエリでやろうとしていました。 いただいたアドバイスを持って、職場の詳しそうな人に聞いてみます。 本当にありがとうございました。