こちらの DJoin 関数を使って、
https://web.archive.org/web/20150517052733/http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaDJoin.html
SELECT T_購入.実購入者番号 AS 番号, T_購入.実購入者, First(DJoin("チケット購入者","T_購入","実購入者番号=" & [実購入者番号] & "And 番号 <> 実購入者番号",255,"、",False,"番号")) AS 委託者
FROM T_購入
GROUP BY T_購入.実購入者番号, T_購入.実購入者;
----------------------------
汎用的じゃなくてもよいから手軽に、というなら
こちらの最小限に絞った専用の関数を使って
Public Function MyJoin(Buyer As Long) As String
On Error GoTo ErrorHandler
' 定数/変数宣言部
Dim rs As DAO.Recordset
Dim strSQL As String
Dim strResult As String
strSQL = "Select チケット購入者 From T_購入 " & _
"Where 実購入者番号=" & Buyer & " AND " & _
"実購入者番号<>番号 "
Set rs = CurrentDb.OpenRecordset(strSQL, _
dbOpenForwardOnly, _
dbReadOnly)
' メインループ
Do Until rs.EOF
' 連結する文字列を取得し、追加します。
strResult = strResult & "、" & rs(0).Value
rs.MoveNext
Loop
strResult = Mid(strResult, 2)
ExitProcedure:
On Error Resume Next
rs.Close: Set rs = Nothing
MyJoin = strResult ' 戻り値をセットします。
Exit Function
ErrorHandler:
' クエリー内での使用を考慮して、エラーのダイアログ表示は
' 行なわず、エラーをそのまま戻り値に入れます。
strResult = Err & ":" & Err.Description
Resume ExitProcedure
End Function
こちらの SQL で。
SELECT T_購入.実購入者番号 AS 番号, T_購入.実購入者, First(MyJoin([実購入者番号])) AS 委託者
FROM T_購入
GROUP BY T_購入.実購入者番号, T_購入.実購入者;
No1は実行毎に前回のデータの最後に追加してきますが、実行するたびに追加せずに毎回最初からデータを書き込む場合は
Dim m番号 As Long, m実購入者 As String, m委託者 As String
の後に
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * from T_購入結果"
DoCmd.SetWarnings True
としてください。前回のデータを削除してから書き込みます。
お礼
m3_makiさん、いつもお世話になっております。 ご教示いただいた内容で、クエリにおいて私の思ったとおりの形で表示できました。 大変ありがとうございました。 今後とも、どうぞよろしくお願いいたします。