プロが教える店舗&オフィスのセキュリティ対策術

アクセスにおいて
例えば以下のような1~6までのレコードを

1.Aさん,犬
2.Aさん,猫
3.Bさん,犬
4.Bさん,鳥
5.Bさん,豚
6.cさん,牛



1.A,犬,猫
2.B,犬,鳥,豚
3.C,牛

このように、この場合だったら、~さんを軸に、
ひとつのレコードとしてまとめることは可能でしょうか。

仕事で使いたいのですが、やり方がわからず非常に困っています。
お手数ですがご教示いただけると幸いです。

よろしくお願いいたします。

A 回答 (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)

と書けば近いものは出来ます
しかしながらクエリーは頻繁に関数を呼び出すのであまりお勧めは出来ません

一度、全ペット用のテーブルをこの関数を利用して作り、後の操作をする方がマシンに対する負荷は少ないです
    • good
    • 1
この回答へのお礼

noah7150様

さっそくのご回答ありがとうございます。
通常のクエリでは無理なんですね。。
アクセス初心者で通常のクエリでやろうとしていました。

いただいたアドバイスを持って、職場の詳しそうな人に聞いてみます。
本当にありがとうございました。

お礼日時:2008/11/12 17:43

一つのレコードとしてまとめるにあたって、たとえばVBAを使用しレコードセットを開いて


無理矢理1レコードに収めるということでしょうか?
それとも、クエリやSQLを使って表示したいということでしょうか?

前者であれば可能ですが、前者を希望ならすでにやってるような気がします。
後者を希望であれば難しい(というか無理)だと思います。

上の例で言うと、一つのフィールドに「犬,鳥,豚」と格納するのか、
それぞれを別のフィールドに分けるのかという問題も出てきます。
そのあたりをもう少しまとめてみるとわかりやすいです。


なお、もしも「データが『犬,鳥,豚,猫,牛』の5種類しかない」というようにある程度枠が決まっているのであれば無理矢理出来ないこともなさそうですが・・・。
    • good
    • 1
この回答へのお礼

Pakkun10様

さっそくご回答いただきありがとうございます。
クエリを使って、表示しようとしていました。。
無理そうですね。。。

例であげたものに補足すると、
「犬」「鳥」「豚」は別々のフィールドにします。
データの種類は、30以上あります。

しかしながら、考え方を変えたほうがよさそうですね。
ほかの方法で必要なデータ処理ができないかも考えてみます。

まずは、御礼申し上げます。ありがとございました。

お礼日時:2008/11/12 17:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A