MS Access SQL查询以连接或合并相关字段

时间:2011-01-24 18:35:29

标签: sql database ms-access

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

2 个答案:

答案 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