如果我有以下MS Access表和示例数据,
Status tbl UpdateID PK CustomerNo text StatusType text UpdateDate date
UpdateID, CustomerNo, StatusType, UpdateDate 001, 0099, Open, 2011-01-01 002, 0099, Pend, 2011-01-02 003, 0100, Open, 2011-01-03 004, 0099, Appr, 2011-01-04 005, 0100, Pend, 2011-01-05 006, 0099, Clsd, 2011-01-07
然后我怎么能写一个会产生以下统一/连接输出的查询?
CustomerNo, UpdateDate 0099, 2011-01-01;2011-01-02;2011-01-04;2011-01-07 0100, 2011-01-03;2011-01-05
答案 0 :(得分:2)
没有方便的方法在Access中执行此操作而不使用代码迭代返回的行并自己构建字符串。
以下是一些可以帮助您执行此操作的代码:
Public Function ListOf(sSQL As String, Optional sSeparator As String = ", ") As String
Dim sResults As String
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(sSQL)
While Not rs.EOF
If sResults = "" Then
sResults = Nz(rs.Fields(0).Value, "???")
Else
sResults = sResults + sSeparator & Nz(rs.Fields(0).Value, "???")
End If
rs.MoveNext
Wend
ListOf = sResults
End Function
以下是如何在Access查询中使用它:
SELECT [CustomerNo],
(ListOf('SELECT [UpdateDate] FROM StatusTbl WHERE CustomerNo = ' + CStr([CustomerNo]))) AS UpdateDates
FROM StatusTbl
请注意,这仅在您在Access中执行查询时有效,从(例如)ADO连接执行的查询将无法访问ListOf函数。
答案 1 :(得分:0)
这种情况经常出现,这是以前的一段话:Combine rows / concatenate rows