2011-01-24 85 views
1

如果我有以下的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
+0

我现在认识到UpdateDate是日期类型可以解决复杂的,但如果把它当作文本将简化的答案,然后这就够了。 – duckah 2011-01-24 18:39:35

回答

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函数。

+0

我将此功能添加到模块并保存,然后更新我的查询,如图所示。试图运行查询将返回编译错误:“用户定义类型未定义”,并指向“Dim rs As DAO.Recordset”行。 “DAO”的问题在这里吗? – duckah 2011-01-24 19:02:18