MS访问SQL查询来连接或合并相关领域
问题描述:
如果我有以下的MS Access表和样本数据,MS访问SQL查询来连接或合并相关领域
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
答
在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函数。
+0
我将此功能添加到模块并保存,然后更新我的查询,如图所示。试图运行查询将返回编译错误:“用户定义类型未定义”,并指向“Dim rs As DAO.Recordset”行。 “DAO”的问题在这里吗? – duckah 2011-01-24 19:02:18
我现在认识到UpdateDate是日期类型可以解决复杂的,但如果把它当作文本将简化的答案,然后这就够了。 – duckah 2011-01-24 18:39:35